Исключение FileProvider: IllegalArgumentException: не удалось найти настроенный корень, содержащий - PullRequest
0 голосов
/ 27 июня 2018

Я хочу открыть камеру, щелкнуть и загрузить полное изображение на сервер. Для этого я пытаюсь сохранить изображение в определенном месте, а затем загрузить его другим способом. Я получаю эту ошибку при получении fileprovider для работы и пробовал различные решения по переполнению стека, но ни одно из них не работает для меня.

java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Android/data/com.learning.speeeddy.imagereader.app/files/Pictures/IMG_20180627_132113_1596259289.jpg
    at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:738)
    at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:417)
    at com.learning.speeeddy.imagereader.feature.MainActivity.dispatchTakePictureIntent(MainActivity.java:67)
    at com.learning.speeeddy.imagereader.feature.MainActivity.access$200(MainActivity.java:40)
    at com.learning.speeeddy.imagereader.feature.MainActivity$2.onClick(MainActivity.java:323)
    at android.view.View.performClick(View.java:5637)
    at android.view.View$PerformClick.run(View.java:22433)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6186)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

В MainActivity.java

private void dispatchTakePictureIntent() {
    Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if(pictureIntent.resolveActivity(getPackageManager()) != null){
        //Create a file to store the image
        File photoFile = null;
        try {
            photoFile = createImageFile();
        } catch (IOException ex) {
            // Error occurred while creating the File
            ex.printStackTrace();
        }
        if (photoFile != null) {
            Uri photoURI = FileProvider.getUriForFile(this,"com.learning.speeeddy.imagereader.fileprovider", photoFile);
            pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
            startActivityForResult(pictureIntent, CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE);
        }
    }
}

private File createImageFile() throws IOException {
    String timeStamp =
            new SimpleDateFormat("yyyyMMdd_HHmmss",
                    Locale.getDefault()).format(new Date());
    String imageFileName = "IMG_" + timeStamp + "_";
    File storageDir =
            getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );


    return image;
}

В AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.learning.speeeddy.imagereader">
    <uses-feature android:name="android.hardware.camera"
    android:required="false" />
    <uses-permission android:name="android.permission.INTERNET" android:required="true"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:required="true"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <meta-data
            android:name="aia-compat-api-min-version"
            android:value="1" />
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.learning.speeeddy.imagereader.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths"></meta-data>
        </provider>
    </application>
</manifest>

In file_paths.xml (/ res / xml)

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_images" path="Android/data/com.learning.speeeddy.imagereader.app/files/Pictures" />
</paths>
...