2017-10-31 15 views
2

私はLollipop以下で変なクラッシュがあります。サーバーからファイルをダウンロードしようとするとセキュリティ例外が発生しますが、Marshmallow以上のデバイスではクラッシュしません。 Logcatは:DESTINATION_FILE_URIを使用する必要があるのWRITE_EXTERNAL_STORAGE許可:java.lang.SecurityException:によって引き起こさtargetSdkVersion以下のDownload Managerのセキュリティ例外22

のuid 10229はandroid.permission.WRITE_EXTERNAL_STORAGEを持っていません。私は

targetSdkVersion 22 

は、最新のSDKのバージョンをターゲットとするGoogleのコンソール上の私たちの最初のプッシュ後に変更されますが、今のところ、これは22に残りますので、実行時の権限は不要使うアプリケーションのgrandle

。 さらに、Appのマニフェストでは、アプリの許可を宣言します。また

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

DownloadManagerAsynckTask内部で使用しますコード:サムスンギャラクシーS6を実行しているエミュレータで、再び

try { 
     String dirPath = String.format("%5$s/%1$s/Resources/%2$s/%3$s/%4$s/", userID, resource.getiD(), filePackage.getiD(), language, dir.getCanonicalPath()); 
     File makeDirs = new File(dirPath); 
     makeDirs.mkdirs(); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
} 

this.downloadManager = (DownloadManager) getApplicationContext().getSystemService(DOWNLOAD_SERVICE); 
DownloadManager.Request request = new DownloadManager.Request(url); 
     request.setDestinationInExternalFilesDir(getApplicationContext(), null, filePath); 
     request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN); 
     request.setVisibleInDownloadsUi(false); 
     downloadID = downloadManager.enqueue(request); 

、このクラッシュはOSバージョン5.0.2とギャラクシーA5にのみ観察されますLollipopとエミュレータ実行中Kitkat 4.4.4 HTC One。

フルstack trace:あなたがどんな考えを持っている

java.lang.RuntimeException: Unable to start activity ComponentInfo{...players.PDFViewer}: java.lang.SecurityException: need WRITE_EXTERNAL_STORAGE permission to use DESTINATION_FILE_URI: uid 10229 does not have android.permission.WRITE_EXTERNAL_STORAGE. 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2808) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2873) 
                      at android.app.ActivityThread.access$900(ActivityThread.java:181) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1482) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:145) 
                      at android.app.ActivityThread.main(ActivityThread.java:6145) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:372) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
                      Caused by: java.lang.SecurityException: need WRITE_EXTERNAL_STORAGE permission to use DESTINATION_FILE_URI: uid 10229 does not have android.permission.WRITE_EXTERNAL_STORAGE. 
                      at android.os.Parcel.readException(Parcel.java:1540) 
                      at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185) 
                      at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137) 
                      at android.content.ContentProviderProxy.insert(ContentProviderNative.java:475) 
                      at android.content.ContentResolver.insert(ContentResolver.java:1260) 
                      at android.app.DownloadManager.enqueue(DownloadManager.java:1336) 
                      at de.imsystems.crmmobile.players.PDFViewer.onCreate(PDFViewer.java:104) 
                      at android.app.Activity.performCreate(Activity.java:6374) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2752) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2873)  
                      at android.app.ActivityThread.access$900(ActivityThread.java:181)  
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1482)  
                      at android.os.Handler.dispatchMessage(Handler.java:102)  
                      at android.os.Looper.loop(Looper.java:145)  
                      at android.app.ActivityThread.main(ActivityThread.java:6145)  
                      at java.lang.reflect.Method.invoke(Native Method)  
                      at java.lang.reflect.Method.invoke(Method.java:372)  
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)  

場合は、事前に感謝し、それらを共有してください。

+0

'filePath'。お値打ちください。 android.os.Parcel.readException(Parcel.java:1540) 'で – greenapps

+0

'。 READ_EXTERNAL_STORAGEのリクエストを追加することができます。 – greenapps

+0

'DownloadManagerinsideとAsynckTaskを使用するコード:'。そのコードを非同期タスクに入れるべきではありません。 – greenapps

答えて

1

最終的にはこの投稿WRITE_EXTERNAL_STORAGE not working on lollipop even though it's set in the manifestが私を助けました。私がやったことは、このように私のAndroidManifest.xmlファイルにアクセス権を変更することでした:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="26" tools:replace="android:maxSdkVersion"/> 

今、アプリがクラッシュしません!

関連する問題