Android 4.4 图库选择图片 路径 出错

android 4.3 获取 图片 与android 4.4 会有些地方不一样:

安卓4.4之前:content://media/external/images/media/1234

安卓4.4:content://com.android.providers.media.documents/document/image:1234

解决办法:

 Intent intent=new Intent(Intent.ACTION_GET_CONTENT);//ACTION_OPEN_DOCUMENT
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.setType(MIME_TYPE_IMAGE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri.toString());
        intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
        intent.putExtra("return-data", false);
        if(android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.KITKAT){
        startActivityForResult(intent, RESULT_CODE_FOR_GET_PHOTO_FROM_ABULM_KITKAT);
        }else{
        startActivityForResult(intent, RESULT_CODE_FOR_GET_PHOTO_FROM_ABULM);
        }

获取图片方式:

/**
     * >=API 19 获取图片的方式 
     * @param context
     * @param uri
     * @return
     */
    public static String GetFilePathFor(final Context context, final Uri uri) {
  		final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
  		// DocumentProvider
  		if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
  			// ExternalStorageProvider
  			if (isExternalStorageDocument(uri)) {
  				final String docId = DocumentsContract.getDocumentId(uri);
  				final String[] split = docId.split(":");
  				final String type = split[0];

  				if ("primary".equalsIgnoreCase(type)) {
  					return Environment.getExternalStorageDirectory() + "/"+ split[1];
  				}
  			}
  			// DownloadsProvider
  			else if (isDownloadsDocument(uri)) {
  				final String id = DocumentsContract.getDocumentId(uri);
  				final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),Long.valueOf(id));
  				return getDataColumn(context, contentUri, null, null);
  			}
  			// MediaProvider
  			else if (isMediaDocument(uri)) {
  				final String docId = DocumentsContract.getDocumentId(uri);
  				final String[] split = docId.split(":");
  				final String type = split[0];

  				Uri contentUri = null;
  				if ("image".equals(type)) {
  					contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
  				} else if ("video".equals(type)) {
  					contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
  				} else if ("audio".equals(type)) {
  					contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
  				}

  				final String selection = "_id=?";
  				final String[] selectionArgs = new String[] { split[1] };

  				return getDataColumn(context, contentUri, selection,selectionArgs);
  			}
  		}
  		// MediaStore (and general)
  		else if ("content".equalsIgnoreCase(uri.getScheme())) {

  			// Return the remote address
  			if (isGooglePhotosUri(uri))
  				return uri.getLastPathSegment();

  			return getDataColumn(context, uri, null, null);
  		}
  		// File
  		else if ("file".equalsIgnoreCase(uri.getScheme())) {
  			return uri.getPath();
  		}

  		return null;
      	}


      	public static String getDataColumn(Context context, Uri uri, String selection,String[] selectionArgs) {
				Cursor cursor = null;
				final String[] projection = { MediaStore.Images.Media.DATA };
				try {
					cursor = context.getContentResolver().query(uri, projection,selection, selectionArgs, null);
					if (cursor != null && cursor.moveToFirst()) {
						final int index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
						return cursor.getString(index);
					}
				} finally {
					if (cursor != null)
						cursor.close();
				}
					return null;
		      	}



      	public static boolean isExternalStorageDocument(Uri uri) {
      		return "com.android.externalstorage.documents".equals(uri.getAuthority());
      	}


      	public static boolean isDownloadsDocument(Uri uri) {
      		return "com.android.providers.downloads.documents".equals(uri.getAuthority());
      	}


      	public static boolean isMediaDocument(Uri uri) {
      		return "com.android.providers.media.documents".equals(uri.getAuthority());
      	}


      	public static boolean isGooglePhotosUri(Uri uri) {
      		return "com.google.android.apps.photos.content".equals(uri.getAuthority());
      	}


你可能感兴趣的:(图片,获取图片)