Не удалось найти настроенный корень, содержащий «Путь к файлу изображения» - PullRequest
0 голосов
/ 30 ноября 2018

Я использовал этот учебник веб-страницы в качестве руководства для построения намерений камеры.

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

После того, как я столкнулся с ошибкой, я просмотрел эти ссылки:

... и несколько других похожих ссылок, но безуспешно.

Мой провайдер файлов file_paths XMLвыглядит так:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="my_images"
        path="."/>
</paths>

My Android Manifest имеет следующие элементы:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--<uses-permission android:name="android.permission.CAMERA"/>-->
<uses-feature android:name="android.hardware.camera"
    android:required="true" />

    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:exported="false"
        android:grantUriPermissions="true"
        tools:replace="android:authorities">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths"
            tools:replace="android:resource"/>
    </provider>

My MainActivity Java выглядит (это грязно сейчас я все еще пытаюсь выяснить, чтодолжен остаться или уйти после того, как я преодолею эту ошибку):

public class MainActivity extends AppCompatActivity {

private static final int REQUEST_CAPTURE_IMAGE = 100;
String mCurrentPhotoPath;
String imageFilePath;
ImageView mImageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    Button photoButton = findViewById(R.id.photobutton);
    photoButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            openCameraIntent();
            Toast.makeText(getBaseContext()
                    ,"Button OK",Toast.LENGTH_LONG).show();
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode,
                                Intent data) {
    if (requestCode == REQUEST_CAPTURE_IMAGE &&
            resultCode == RESULT_OK) {
        if (data != null && data.getExtras() != null) {
            Bitmap imageBitmap = (Bitmap) data.getExtras().get("data");
            mImageView.setImageBitmap(imageBitmap);
        }
    }
}

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 */
    );

    imageFilePath = image.getAbsolutePath();
    return image;
}

private void openCameraIntent() {
    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
        }
        if (photoFile != null) {
            Uri photoURI = FileProvider.getUriForFile(this,
                    "com.example.epinesis_.takeapic.provider",
                    photoFile);
            pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                    photoURI);
            startActivityForResult(pictureIntent,
                    REQUEST_CAPTURE_IMAGE);
        }else{
            openCameraIntent();
        }
    }
}

private void galleryAddPic() {
    Intent mediaScanIntent =
            new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    File f = new File(mCurrentPhotoPath);
    Uri contentUri = Uri.fromFile(f);
    mediaScanIntent.setData(contentUri);
    this.sendBroadcast(mediaScanIntent);
}}

Может быть, что-то простое, я просто не могу видеть это вМомент.

Вот полная ошибка:

2018-11-30 06:47:31.667 4484-4484/com.example.epinesis_.takeapic E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.epinesis_.takeapic, PID: 4484
java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Android/data/com.example.epinesis_.takeapic/files/Pictures/IMG_20181130_064731_1923388899699452697.jpg
    at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:738)
    at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:417)
    at com.example.epinesis_.takeapic.MainActivity.openCameraIntent(MainActivity.java:87)
    at com.example.epinesis_.takeapic.MainActivity.access$000(MainActivity.java:23)
    at com.example.epinesis_.takeapic.MainActivity$1.onClick(MainActivity.java:40)
    at android.view.View.performClick(View.java:6294)
    at android.view.View$PerformClick.run(View.java:24770)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...