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