CropImage показывает, что носитель доступен только для чтения

Использование Библиотеки обрезки изображений для обрезки моих фотографий после их выбора с намерением, которое я получаю

java.lang.IllegalArgumentException: носитель доступен только для чтения


Манифест

<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>

Редактировать: у меня также есть это:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Код

Intent intent;
if ( Build.VERSION.SDK_INT < 19 ) {
    intent = new Intent();
    intent.setAction( Intent.ACTION_GET_CONTENT );
    intent.putExtra( "android.intent.extra.LOCAL_ONLY", true );
    intent.setType( "image/*" );
    startActivityForResult( intent, PICK_IMAGE );
} else {
    intent = new Intent( Intent.ACTION_OPEN_DOCUMENT );
    intent.addCategory( Intent.CATEGORY_OPENABLE );
    intent.putExtra( "android.intent.extra.LOCAL_ONLY", true );
    intent.setType( "image/*" );
    startActivityForResult( intent, PICK_IMAGE );
}

protected void onActivityResult( int requestCode, int resultCode, Intent imageReturnedIntent ) {
    super.onActivityResult( requestCode, resultCode, imageReturnedIntent );

    switch ( requestCode ) {
        case PICK_IMAGE:
            try {
                selectedImage = imageReturnedIntent.getData();
                CropImageIntentBuilder cropImage = new CropImageIntentBuilder( 4, 3, 640, 480, selectedImage );
                cropImage.setSourceImage( selectedImage );
                startActivityForResult( cropImage.getIntent( this ), CROP_IMAGE );
            } catch ( Exception e ) {
                e.printStackTrace();
            }
            break;

        case CROP_IMAGE:
            try {
                String[] filePathColumn = { MediaStore.Images.Media.DATA };
                Cursor cursor = getContentResolver().query( selectedImage, filePathColumn, null, null, null );
                cursor.moveToFirst();
                int columnIndex = cursor.getColumnIndex( filePathColumn[ 0 ] );
                tempFile = new File( cursor.getString( columnIndex ) );
                cursor.close();
            } catch ( Exception e ) {
                e.printStackTrace();
            }
            break;
    }
}

если я удалю

<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>

я получил

java.lang.SecurityException: Отказ в доступе: запись com.google.android.apps.photos.content.GooglePhotosImageProvider uri content://com.google.android.apps.photos.content/0/СКРЫТО from pid=HIDDEN, uid=HIDDEN требует com.google.android.apps.photos.permission.GOOGLE_PHOTOS или GrantUriPermission()


person Jonas Borggren    schedule 09.03.2015    source источник
comment
Каков тип и значение selectedImage? И почему это не локальная переменная onActivityResult? На каком утверждении вы получаете исключение? Зачем вы публикуете так много кода? Пожалуйста, публикуйте только тот код, который используется для воспроизведения проблемы.   -  person greenapps    schedule 09.03.2015
comment
Uri selectedImage; и я получаю ошибку в этой строке tempFile = new File( cursor.getString( columnIndex ) );. Если бы я знал, какая часть моего кода вызывает это, я бы не публиковал все это.   -  person Jonas Borggren    schedule 09.03.2015
comment
Разделите это выражение как String filePath =cursor.getString( columnIndex );. И скажите, что такое filePath. Затем используйте его для файла. Вы делаете слишком много в одном выражении, поэтому его сложно отлаживать. Интересно, даст ли новый File() это исключение, поскольку он ничего не делает с файловой системой. И вы не говорите, что доставляет selectedImage.getPath().   -  person greenapps    schedule 09.03.2015
comment
selectedImage.getPath() указывает правильный путь к файлу, в данном случае /storage/emulated/0/MyPath/img.jpeg   -  person Jonas Borggren    schedule 18.03.2015
comment
Это я спросил. Но я также спросил, какой путь к файлу был в String filePath =cursor.getString( columnIndex );   -  person greenapps    schedule 18.03.2015