How to get image from gallery which supports for API>=19 & API<19 both?

北战南征 提交于 2019-12-11 02:41:09

问题


Image is not importing, every time when I pic image from gallery in Android.

	Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, LOAD_IMAGE_RESULTS);
    

super.onActivityResult(requestCode, resultCode, data);
BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options();
BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565;
if (requestCode == LOAD_IMAGE_RESULTS && resultCode == RESULT_OK
				&& data != null) {
			imgUri = data.getData();
			// Let's read picked image path using content resolver
			String[] filePath = { MediaStore.Images.Media.DATA };
			Cursor cursor = getContentResolver().query(imgUri, filePath, null,
					null, null);
			cursor.moveToFirst();
			String imagePath = cursor.getString(cursor
					.getColumnIndex(filePath[0]));

			bmp = BitmapFactory.decodeFile(imagePath);

			cursor.close();
}
image is not importing every time ,some bmp sets nothing on imageview.

how to get image from gallery which supports for API>=19 & API<19 both...


回答1:


This code'll solve the problem for SDK < API11, SDK >= 11 && SDK < 19 and SDK > 19

Declare it Globally

public final int GALLERY_PHOTO = 2;
Bitmap newbitmap;
private Uri fileUri;

Use this Method to Start Image chooser

public void callGallery() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"),
            GALLERY_PHOTO);
}

Use this condition in Default @Overide onActivityResult(int requestCode, int resultCode, Intent data)

if (requestCode == GALLERY_PHOTO) {

        if (resultCode == RESULT_OK) {

            // SDK < API11
            if (Build.VERSION.SDK_INT < 11) {

                try {
                    realPath = RealPathUtil.getRealPathFromURI_BelowAPI11(
                            Yourclassname.this,
                            data.getData());
                    setTextViews(Build.VERSION.SDK_INT, data.getData()
                            .getPath(), realPath);
                } catch (Exception e) {

                    e.printStackTrace();
                    Uri selectedImage = data.getData();
                    String[] filePathColumn = { MediaStore.Images.Media.DATA };

                    Cursor cursor = getContentResolver()
                            .query(selectedImage, filePathColumn, null,
                                    null, null);
                    cursor.moveToFirst();

                    int columnIndex = cursor
                            .getColumnIndex(filePathColumn[0]);
                    String filePath = cursor.getString(columnIndex);
                    cursor.close();

                    newbitmap = BitmapFactory.decodeFile(filePath);
                    imageview.setImageBitmap(newbitmap);

                }
            }

            // SDK >= 11 && SDK < 19
            else if (Build.VERSION.SDK_INT < 19) {

                try {
                    realPath = RealPathUtil.getRealPathFromURI_API11to18(
                            yourclassname.this,
                            data.getData());
                    setTextViews(Build.VERSION.SDK_INT, data.getData()
                            .getPath(), realPath);
                } catch (Exception e1) {

                    e1.printStackTrace();
                    Uri selectedImage = data.getData();
                    String[] filePathColumn = { MediaStore.Images.Media.DATA };

                    Cursor cursor = getContentResolver()
                            .query(selectedImage, filePathColumn, null,
                                    null, null);
                    cursor.moveToFirst();

                    int columnIndex = cursor
                            .getColumnIndex(filePathColumn[0]);
                    String filePath = cursor.getString(columnIndex);
                    cursor.close();

                    newbitmap = BitmapFactory.decodeFile(filePath);
                    imageview.setImageBitmap(newbitmap);

                }
            }

            else {
                try {

                    realPath = RealPathUtil.getRealPathFromURI_API19(
                            yourclassname.this,
                            data.getData());

                    setTextViews(Build.VERSION.SDK_INT, data.getData()
                            .getPath(), realPath);

                } catch (Exception e) {

                    Uri selectedImage = data.getData();
                    String[] filePathColumn = { MediaStore.Images.Media.DATA };

                    Cursor cursor = getContentResolver()
                            .query(selectedImage, filePathColumn, null,
                                    null, null);
                    cursor.moveToFirst();

                    int columnIndex = cursor
                            .getColumnIndex(filePathColumn[0]);
                    String filePath = cursor.getString(columnIndex);
                    cursor.close();

                    newbitmap = BitmapFactory.decodeFile(filePath);
                    imageview.setImageBitmap(newbitmap);

                }
            }

            // end

        } else if (resultCode == RESULT_CANCELED) {

            Toast.makeText(getApplicationContext(), "Canceled",
                    Toast.LENGTH_SHORT).show();
        } else {
            // failed to capture image
            Toast.makeText(getApplicationContext(),

                    "Oops!! Failed to pick Image", Toast.LENGTH_SHORT).show();
        }

    }

Include this method in your class

private void setTextViews(int sdk, String uriPath, String realPath) {

    Uri uriFromPath = Uri.fromFile(new File(realPath));

    fileUri = uriFromPath;

    try {
        newbitmap = BitmapFactory.decodeStream(getContentResolver()
                .openInputStream(fileUri));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }


    imageview.setImageBitmap(newbitmap);

    Log.d("Status", "Build.VERSION.SDK_INT:" + sdk);
    Log.d("Status", "URI Path:" + fileUri);
    Log.d("Status", "Real Path: " + realPath);

}

Create this Helper Methods in RealPathUtil.class

public class RealPathUtil {

@SuppressLint("NewApi")
public static String getRealPathFromURI_API19(Context context, Uri uri){
    String filePath = "";
    String wholeID = DocumentsContract.getDocumentId(uri);

     // Split at colon, use second item in the array
     String id = wholeID.split(":")[1];

     String[] column = { MediaStore.Images.Media.DATA };     

     // where id is equal to             
     String sel = MediaStore.Images.Media._ID + "=?";

     Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
                               column, sel, new String[]{ id }, null);

     int columnIndex = cursor.getColumnIndex(column[0]);

     if (cursor.moveToFirst()) {
         filePath = cursor.getString(columnIndex);
     }   

     cursor.close();

     return filePath;
}


@SuppressLint("NewApi")
public static String getRealPathFromURI_API11to18(Context context, Uri contentUri) {
      String[] proj = { MediaStore.Images.Media.DATA };
      String result = null;

      CursorLoader cursorLoader = new CursorLoader(
              context, 
        contentUri, proj, null, null, null);        
      Cursor cursor = cursorLoader.loadInBackground();

      if(cursor != null){
       int column_index = 
         cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
       cursor.moveToFirst();
       result = cursor.getString(column_index);
      }

      return result;  
}

public static String getRealPathFromURI_BelowAPI11(Context context, Uri contentUri){
           String[] proj = { MediaStore.Images.Media.DATA };
           Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
           int column_index
      = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
           cursor.moveToFirst();
           return cursor.getString(column_index);
   }
}

Hope this will solve your Problem.



来源:https://stackoverflow.com/questions/28342678/how-to-get-image-from-gallery-which-supports-for-api-19-api19-both

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!