Загрузить изображение из файла на HTC

На изображении HTC в ImageView не отображается. Я пытаюсь загрузить изображение из файла:

Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
 i.setType("image/jpeg");
 startActivityForResult(i, 0);

Примите результат:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
 if (resultCode == Activity.RESULT_OK) {
 {
 if (data != null) {
 if (requestCode == 0){
 Uri selectedImage = data.getData();
 loadImageToImageView(selectedImage);
 }
 } 
 }
 }
 }

Сделайте в фоновом режиме в loadImageToImageView (Uri uri):

protected Bitmap doInBackground(String... file) {
 InputStream in = null;
 Bitmap bitmap = null;
 try {
 in = getContentResolver().openInputStream(uri);
 bitmap = BitmapFactory.decodeStream(in);
 new WeakReference<bitmap>(bitmap);
 } catch (Exception e) {
 //....
 } finally {
 try {
 if (in != null) {
 in.close();
 }
 } catch (IOException ioex) {
 //....
 }
 }
return bitmap;
}


protected void onPostExecute(Bitmap result) {
 if (result != null) {
 imageView.setImageBitmap(result);
 }
 }
</bitmap>

На фотографии HTS ONE X не отображается. В чем проблема? На других устройствах все работает нормально. URI не NULL, никаких ошибок

1 ответ

Попробуйте этот путь, надеюсь, что это поможет вам решить вашу проблему.

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, ""), 0);

public void onActivityResult(int requestCode, int resultCode, Intent data) {
 if (resultCode == Activity.RESULT_OK) {
 if (data != null) {
 if (requestCode == 0){
 imageView.setImageBitmap(decodeFile(getAbsolutePath(data.getData())));
 }
 }
 }
}

public String getAbsolutePath(Uri uri) {
 if(Build.VERSION.SDK_INT >= 19){
 String id = uri.getLastPathSegment().split(":")[1];
 final String[] imageColumns = {MediaStore.Images.Media.DATA };
 final String imageOrderBy = null;
 Uri tempUri = getUri();
 Cursor imageCursor = getContentResolver().query(tempUri, imageColumns,MediaStore.Images.Media._ID + "="+id, null, imageOrderBy);
 if (imageCursor.moveToFirst()) {
 return imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
 }else{
 return null;
 }
 }else{
 String[] projection = { MediaStore.MediaColumns.DATA };
 Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
 if (cursor != null) {
 int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
 cursor.moveToFirst();
 return cursor.getString(column_index);
 } else{
 return null;
 }
 }

private Uri getUri() {
 String state = Environment.getExternalStorageState();
 if(!state.equalsIgnoreCase(Environment.MEDIA_MOUNTED))
 return MediaStore.Images.Media.INTERNAL_CONTENT_URI;
 else
 return MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
}


public Bitmap decodeFile(String path) {
 try {
 BitmapFactory.Options o = new BitmapFactory.Options();
 o.inJustDecodeBounds = true;
 BitmapFactory.decodeFile(path, o);
 // The new size we want to scale to
 final int REQUIRED_SIZE = 70;
 // Find the correct scale value. It should be the power of 2.
 int scale = 1;
 while (o.outWidth / scale / 2 >= REQUIRED_SIZE && o.outHeight / scale / 2 >= REQUIRED_SIZE)
 scale *= 2;
 // Decode with inSampleSize
 BitmapFactory.Options o2 = new BitmapFactory.Options();
 o2.inSampleSize = scale;
 return BitmapFactory.decodeFile(path, o2);
 } catch (Throwable e) {
 e.printStackTrace();
 }
 return null;
 }

licensed under cc by-sa 3.0 with attribution.