Исключение безопасности при запуске моего приложения? - PullRequest
0 голосов
/ 06 декабря 2018

Я работаю над приложением, которое сохраняет импортированные фотографии в базу данных комнаты, и все они затем отображаются в приложении.Все работает нормально, когда я импортирую свое первое изображение, но затем, когда я перезагружаю, это приводит к этой исключительной ситуации SecurityException, где я использую AsyncTask для доступа ко всем сохраненным фотографиям в базе данных комнаты.

Ошибка не возникаетЭто происходит на моем телефоне, но это происходит на имитируемом устройстве и на моем запасном телефоне, и я не уверен, в чем причина.

Мой вопрос: почему возникает эта ошибка и как можноЯ чиню это?Я пробовал большинство исправлений для SecurityException, которые я видел в StackOverflow, но ни одно из них, похоже, не работает.

Весь соответствующий код указан ниже:

Трассировка стека:

java.lang.SecurityException: Permission Denial: opening provider com.google.android.apps.photos.contentprovider.impl.MediaContentProvider from ProcessRecord{47792f1 13877:com.example.oskilla.geophotoapp/u0a91} (pid=13877, uid=10091) that is not exported from UID 10075
        at android.os.Parcel.createException(Parcel.java:1942)
        at android.os.Parcel.readException(Parcel.java:1910)
        at android.os.Parcel.readException(Parcel.java:1860)
        at android.app.IActivityManager$Stub$Proxy.getContentProvider(IActivityManager.java:4181)
        at android.app.ActivityThread.acquireProvider(ActivityThread.java:5970)
        at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2592)
        at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1828)
        at android.content.ContentResolver.query(ContentResolver.java:786)
        at android.content.ContentResolver.query(ContentResolver.java:752)
        at android.content.ContentResolver.query(ContentResolver.java:710)
        at com.example.oskilla.geophotoapp.BitmapBuilder.createBitmap(BitmapBuilder.java:33)
        at com.example.oskilla.geophotoapp.MapsActivity$FindPhotos.onPostExecute(MapsActivity.java:147)
        at com.example.oskilla.geophotoapp.MapsActivity$FindPhotos.onPostExecute(MapsActivity.java:108)
        at android.os.AsyncTask.finish(AsyncTask.java:695)
        at android.os.AsyncTask.access$600(AsyncTask.java:180)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: android.os.RemoteException: Remote stack trace:
        at com.android.server.am.ActivityManagerService.getContentProviderImpl(ActivityManagerService.java:12188)
        at com.android.server.am.ActivityManagerService.getContentProvider(ActivityManagerService.java:12585)
        at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:357)
        at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3291)
        at android.os.Binder.execTransact(Binder.java:731)

Область кода, о которой идет речь (не удается получить курсор):

String[] FILE = { MediaStore.Images.Media.DATA };

Cursor cursor = context.getContentResolver().query(photoUri, FILE, null, null, null);

cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(FILE[0]);
String ImageDecode = cursor.getString(columnIndex);
cursor.close();

bitmap = BitmapFactory.decodeFile(ImageDecode);

Код, который вызывает вышеуказанный код (createBitmap):

    for(PhotoEntity photo : photoEntities) {
                System.out.println(photo.getImageLocation());
                Uri bitmapUri = photo.getImageLocation();
                System.out.println(bitmapUri.getPath() + " this is from findphotos");

                Bitmap bitmap = BitmapBuilder.createBitmap(context, bitmapUri);

                bitmap = BitmapBuilder.getBitmap(bitmap,
                        ExifConverter.getRealPathFromUri(context, photo.getImageLocation()), 200, 200);
}

Вся помощь очень ценится.Спасибо

1 Ответ

0 голосов
/ 06 декабря 2018

Вам необходимо добавить это разрешение в файл манифеста

<uses-permission android:name="com.google.android.apps.photos.permission.GOOGLE_PHOTOS"/>`
...