2013-03-05 6 views
5

У меня есть активность, у которой есть фильтр намерений android.intent.action.SEND с типом изображений.Избегайте SecurityException при доступе к DownloadProvider

После того, как акции пользователей картину (специально от менеджера загрузок) с моей деятельностью (UploadActivity), активность будет проверять, если пользователь вошел в систему. Если нет, то он будет хранить первоначальное намерение (с EXTRA_STREAM) и отправить пользователя в LoginActivity. Как только этот пользователь войдет в систему, он будет возвращен в UploadActivity с оригинальным сохраненным намерением.

Теперь, даже после восстановления первоначального намерения, я получаю java.lang.SecurityException: Permission Denial: reading com.android.providers.downloads.DownloadProvider uri....

Я понимаю, почему я получаю это. Это потому, что у меня нет временного разрешения, которое имело первоначальное намерение.

Edit: LogCat

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.UploadActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.downloads.DownloadProvider uri content://downloads/all_downloads/1145 from pid=16585, uid=10086 requires android.permission.ACCESS_ALL_DOWNLOADS, or grantUriPermission() 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
    at android.app.ActivityThread.access$600(ActivityThread.java:141) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5041) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.downloads.DownloadProvider uri content://downloads/all_downloads/1145 from pid=16585, uid=10086 requires android.permission.ACCESS_ALL_DOWNLOADS, or grantUriPermission() 
    at android.os.Parcel.readException(Parcel.java:1425) 
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185) 
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137) 
    at android.content.ContentProviderProxy.query(ContentProviderNative.java:366) 
    at android.content.ContentResolver.query(ContentResolver.java:372) 
    at android.content.ContentResolver.query(ContentResolver.java:315) 
    at com.example.UploadActivity.getFileFromContentUri(UploadActivity.java:304) 
    at com.example.UploadActivity.onCreate(UploadActivity.java:195) 
    at android.app.Activity.performCreate(Activity.java:5104) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
    ... 11 more 
+0

Пожалуйста, разместите все ошибки LogCat. Чтобы быть уверенным, у вас есть разрешение «ИНТЕРНЕТ»? – Sam

+0

Оригинальное сообщение обновлено. Да, у меня есть разрешение «ИНТЕРНЕТ». Это единственное разрешение, которое у меня есть. – ademers

+0

@AWebDevDuh: вы также добавили разрешение 'android.permission.ACCESS_ALL_DOWNLOADS'? –

ответ

0

Пожалуйста, ваши полный код для запрашивая ContentProvider. У меня была аналогичная проблема. при вызове курсор:

c=MyApplication.getAppContext().getContentResolver().query(uri,null,null,null,null); 

однако, когда я установить проекцию

String[] proj=new String[] { 
       MediaStore.MediaColumns.DATA, 
       MediaStore.MediaColumns.DISPLAY_NAME, 
     }; 
c=MyApplication.getAppContext().getContentResolver().query(uri,proj,null,null,null); 

это работает. Как только я добавлю MediaStore.MediaColumns.MIME_TYPE к проекции, он снова сработает. Мне кажется, что провайдер не предоставляет доступ к этой (и, возможно, некоторой другой) колонке.

+0

Ну, после тестирования на какое-то время я под впечатлением, это всего лишь первый шаг. С MediaStore.MediaColumns.MIME_TYPE mimeType я постоянно получаю Исключения, но без него я все равно получаю SecurityExceptions время от времени. Может быть, разрешение будет отменено через некоторое время? Чем дольше я сижу в режиме отладки, тем вероятнее будет исключение в следующем запросе. Для меня запрос одного Uri из semms «ACTION_SEND» для работы, но запрос нескольких Uris из «ACTION_SEND_MULTIPLE» по-прежнему вызывает некоторые проблемы время от времени. –

+0

Я попал в тот же камень преткновения - иногда я могу получить доступ к потоку содержимого, в другое время я получаю SecurityException, идентичный файл и т. Д. Вы узнали больше об этой проблеме? – gregko

Смежные вопросы