java.lang.SecurityException: Permission Denial: pas autorisé à envoyer la diffusion android.intent.action.MEDIA_MOUNTED sur KitKat uniquement
Je suis en utilisant le DownloadManager
de télécharger des images sur notre serveur et je suis de placer les fichiers dans le externalFilesDir
.
Je suis envoyer une diffusion intention, car je ne veux pas que ces images téléchargées apparaissent dans la galerie.
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + context.getExternalFilesDir(null))));
J'ai uniquement testé sur mon Galaxy S3 Jelly Bean 4.3 avant et il était en marche, mais quand je l'ai testé sur KitKat 4.4
il bloque l'application.
Est-il un meilleur moyen de ne pas avoir les fichiers téléchargés à partir de la DownloadManager apparaissent pas dans la galerie de téléphone?
Trace De La Pile
06-05 17:34:41.940: E/AndroidRuntime(15410): FATAL EXCEPTION: main
06-05 17:34:41.940: E/AndroidRuntime(15410): Process: com.walintukai.lfdate, PID: 15410
06-05 17:34:41.940: E/AndroidRuntime(15410): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.DOWNLOAD_COMPLETE flg=0x10 pkg=com.walintukai.lfdate (has extras) } in com.walintukai.lfdate.SocketIOService$1@42359f40
06-05 17:34:41.940: E/AndroidRuntime(15410): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:778)
06-05 17:34:41.940: E/AndroidRuntime(15410): at android.os.Handler.handleCallback(Handler.java:733)
06-05 17:34:41.940: E/AndroidRuntime(15410): at android.os.Handler.dispatchMessage(Handler.java:95)
06-05 17:34:41.940: E/AndroidRuntime(15410): at android.os.Looper.loop(Looper.java:136)
06-05 17:34:41.940: E/AndroidRuntime(15410): at android.app.ActivityThread.main(ActivityThread.java:5057)
06-05 17:34:41.940: E/AndroidRuntime(15410): at java.lang.reflect.Method.invokeNative(Native Method)
06-05 17:34:41.940: E/AndroidRuntime(15410): at java.lang.reflect.Method.invoke(Method.java:515)
06-05 17:34:41.940: E/AndroidRuntime(15410): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
06-05 17:34:41.940: E/AndroidRuntime(15410): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
06-05 17:34:41.940: E/AndroidRuntime(15410): at dalvik.system.NativeStart.main(Native Method)
06-05 17:34:41.940: E/AndroidRuntime(15410): Caused by: java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from pid=15410, uid=10135
06-05 17:34:41.940: E/AndroidRuntime(15410): at android.os.Parcel.readException(Parcel.java:1465)
06-05 17:34:41.940: E/AndroidRuntime(15410): at android.os.Parcel.readException(Parcel.java:1419)
06-05 17:34:41.940: E/AndroidRuntime(15410): at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:2390)
06-05 17:34:41.940: E/AndroidRuntime(15410): at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1127)
06-05 17:34:41.940: E/AndroidRuntime(15410): at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:365)
06-05 17:34:41.940: E/AndroidRuntime(15410): at com.walintukai.lfdate.SocketIOService$1.onReceive(SocketIOService.java:111)
06-05 17:34:41.940: E/AndroidRuntime(15410): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:768)
06-05 17:34:41.940: E/AndroidRuntime(15410): ... 9 more
source d'informationauteur The Nomad
Vous devez vous connecter pour publier un commentaire.
Il semble que google est en train d'essayer d'empêcher que cette KITKAT.
En regardant core/rest/AndroidManifest.xml vous remarquerez que la diffusion
android.intent.action.MEDIA_MOUNTED
est protégée maintenant. Ce qui signifie que c'est une émission que seul le système peut envoyer.La suivante devrait fonctionner pour toutes les versions:
Si le ci-dessus ne fonctionne pas, essayez les opérations suivantes:
Selon cette post vous avez besoin d'un autre moyen pour résoudre ce problème.
Comme l'utilisation de
MediaScannerConnection
ouACTION_MEDIA_SCANNER_SCAN_FILE
.Je sais que sa fin mais essayez ceci peut travailler dans toutes les versions: