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

Я прошел через сбои, перечисленные в консоли Google Play для моего приложения.Одна авария, которую я не могу воспроизвести:

java.lang.RuntimeException: 
at android.app.ActivityThread.deliverResults (ActivityThread.java:3778)
at android.app.ActivityThread.handleSendResult (ActivityThread.java:3821)
at android.app.ActivityThread.access$1400 (ActivityThread.java:168)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1428)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:150)
at android.app.ActivityThread.main (ActivityThread.java:5659)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:822)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:712)
    Caused by: java.lang.SecurityException: 
at android.os.Parcel.readException (Parcel.java:1602)
at android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils.java:183)
at android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils.java:135)
at android.content.ContentProviderProxy.query (ContentProviderNative.java:421)
at android.content.ContentResolver.query (ContentResolver.java:513)
at android.content.ContentResolver.query (ContentResolver.java:438)
at za.co.overtake.onlinetrucks.utils.Utils.getBitmapFromUri (Utils.java:381)
at za.co.overtake.onlinetrucks.fragments.DamagePanelDetailsDialogFragment.onActivityResult (DamagePanelDetailsDialogFragment.java:513)
at android.support.v4.app.FragmentActivity.onActivityResult (FragmentActivity.java:164)
at android.app.Activity.dispatchActivityResult (Activity.java:6602)
at android.app.ActivityThread.deliverResults (ActivityThread.java:3774)

Сообщается, что авария произошла на Hauwei P8 Lite.Я тестировал на различных устройствах (включая Hauwei P8), но не могу воспроизвести проблему!Это разрешения в моем файле манифеста:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

, и здесь я запрашиваю разрешения пользователя:

public static void dispatchLoadGalleryEvent(Context context, Fragment frag) {
    if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(context,
            Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
        PermissionUtil.requestWritePermission(context, frag, ACCESS_GALLERY_PERMISSION_CODE);
        return;
    }

    Intent i = new Intent(
            Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

    frag.startActivityForResult(i, ACCESS_GALLERY_REQUEST_CODE);
}

, а затем здесь я загружаю изображение, используя URI, возвращенный из намерения:

 public static Bitmap getBitmapFromUri(Context context, Uri selectedImage) {
    String[] filePathColumn = { MediaStore.Images.Media.DATA };
    Cursor cursor = context.getContentResolver().query(selectedImage, filePathColumn,
            null, null, null);
    cursor.moveToFirst();
    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String picturePath = cursor.getString(columnIndex);
    cursor.close();
    return (Utils.getBitmapFromFileWithCorrectOrientation(picturePath, 4));
}

Сообщается, что сбой произошел в строке context.getContentResolver (). Query ().Я чувствую, что я делаю что-то глупое, и очень растерялся, что не могу воспроизвести проблему.

1 Ответ

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

SecurityException

Брошенный менеджером безопасности, чтобы указать на нарушение безопасности.

Throwable.getMessage() даст использовать конкретную информацию о безопасности.Без сообщения действительно трудно определить проблему.

Caused by: java.lang.SecurityException: <We got getMessage() data here but it is blank>

Этот logcat пришел из Google PlayStore.У него так много возможностей относительно действий пользователя.Например: -

1. Пользователь отклоняет некоторые разрешения.

2. Пользователь хочет запустить ваше приложение без разрешения.

3. Я думаю, вы должны справиться с каждой проверкой разрешения.Если пользователь хочет отклонить разрешение, вам нужно остановить просмотр этой страницы и ее функциональности или просто обработать ее, чтобы она не вылетала, если пользователь отклонил какое-либо разрешение.

и более.

Просто попробуйтеЗапустите ваше приложение, отклонив все разрешения, и попытайтесь увидеть, работает оно или нет, и найдите подходящее решение, если приложение где-нибудь рухнет.

ПРИМЕЧАНИЕ: -ЭТО ВСЕ О ТЕСТИРОВАНИИ ПРИЛОЖЕНИЯ ОТ НАЧАЛА ДО КОНЦА.

...