Android-камера android.os.FileUriExposedException: - PullRequest
0 голосов
/ 20 февраля 2019

Это код

public void openCamera() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    File file = new File(Environment.getExternalStorageDirectory(), "image.jpg");
    imageURI = Uri.fromFile(file);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageURI);
    startActivityForResult(intent, CAMERA);
}

Вот ошибка

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.app.app, PID: 2971

: file:///storage/emulated/0/image.jpg exposed beyond app through ClipData.Item.getUri()
        at android.os.StrictMode.onFileUriExposed(StrictMode.java:1958)
        at android.net.Uri.checkFileUriExposed(Uri.java:2348)
        at android.content.ClipData.prepareToLeaveProcess(ClipData.java:941)
        at android.content.Intent.prepareToLeaveProcess(Intent.java:9735)
        at android.content.Intent.prepareToLeaveProcess(Intent.java:9720)
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1609)
        at android.app.Activity.startActivityForResult(Activity.java:4472)
        at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
        at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:65)
        at android.app.Activity.startActivityForResult(Activity.java:4430)
        at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:711)
        at com.kushy.features.sell.CommunityPostActivity.openCamera(CommunityPostActivity.java:414)
        at com.kushy.features.sell.CommunityPostActivity$11.onClick(CommunityPostActivity.java:388)
        at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:162)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

Пробный провайдер файлов, но я не уверен, как это реализовать.сделал чтобы код не запускался.Извините ... я сосу

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Если ваш targetSdkVersion> = 24, вы не можете использовать значения file: Uri в Intents на устройствах Android 7.0+. Вы можете изменить свой код следующим образом:

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    ContentValues contentValues = new ContentValues(1);
    contentValues.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());
    Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    startActivityForResult(intent, CAMERA);

Для более подробной информации: Назначение камеры Android FileUriExposedException для SDK> = 24 и https://developer.android.com/training/secure-file-sharing/setup-sharing

0 голосов
/ 20 февраля 2019

Используйте этот код, чтобы получить URI для Android N или выше:

private Uri getFileUri(Context context, Uri fileUri, File file) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        return FileProvider.getUriForFile(context, context.getPackageName() + ".provider", file);
    } else {
        return fileUri;
    }
}

и не забудьте добавить флаг с намерением:

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...