В приложении для Android, которое я делаю, пользователь делает снимок, который я хочу отобразить позже в нескольких действиях. Я придумал ошибку «из памяти» при отображении снимка в настоящее время в представлении изображения, поэтому я решил использовать код от http://developer.android.com/training/displaying-bitmaps/load-bitmap.html, чтобы сделать это эффективно. Вот методы, которые я использую:Android: намерение в OnActivityResult дает неправильный путь
public static int calculateInSampleSize(
BitmapFactory.Options options, int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int halfHeight = height/2;
final int halfWidth = width/2;
while ((halfHeight/inSampleSize) > reqHeight
&& (halfWidth/inSampleSize) > reqWidth) {
inSampleSize *= 2;
}
}
return inSampleSize;
}
и
public static Bitmap decodeSampledBitmap(Uri mUri, int reqWidth, int reqHeight) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(mUri.getPath(), options);
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(mUri.getPath, options);
};
Я позволил пользователю сфотографировать с помощью метода:
static final int REQUEST_IMAGE_CAPTURE = 1;
private void dispatchTakePictureIntent(){
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if(takePictureIntent.resolveActivity(getPackageManager()) != null){
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
А потом получать принятые данные изображения:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK){
Uri imageUri = null;
if(data != null){
imageUri = data.getData();
}
ImageView imageView = (ImageView)findViewById(R.id.new_photo);
imageView.setImageBitmap(decodeSampledBitmap(imageUri, imageView.getWidth(), imageView.getHeight()));
}
}
Мое приложение разбивается, и я получаю info: «Файл не найден или нет такой директории». Я проверил, что делает файл imageUri.getPath(), и в моем случае его: "/ external/images/media/1777" (что кажется мне довольно странным, потому что я не пользуюсь SD-картой) и снятая фотография фактически сохраняется в "/storage/emulated/0/DCIM/100ANDRO/DSC_0052.JPG". У вас есть идеи, что я делаю неправильно?
Вы используете метод getExternalStorage? – KOTIOS
Нет, я не использую его. Все это с фотографией и ее отображением «происходит» в методах, которые я написал. –
ok is ur изображение сохранено? вы используете правильный эмулятор? – KOTIOS