發上等願,結中等緣,享下等福;擇高處立,就平處坐,向寬處行。
阿新 • • 發佈:2019-01-02
在Google Nexus 7 ( Version 4.4.2 )平板出現之前,Intent.ACTION_GET_CONTENT開啟相簿會返回如下形式的Uri :
content://media/external/images/media/3951 ,
使用ContentResolver查詢MediaStore.Images.Media.DATA就可以找檔案的URL, 然而在Google Nexus 7 上用同樣的方法,卻是返回如下Uri :
content://com.android.providers.media.documents/document/image:3951,
這時使用ContentResolver就會報一些異常出來,提示說是沒有許可權(如takePersistableUriPermission等),網上也有一些建議方案,給這個Uri加上相應的許可權,不過
效果都不太理想。
在不斷搜尋,實踐的過程,發現在了有一個比較方便高效的解決問題的方法,分享出來,希望遇到同樣問題的碼友們能快速解決問題,輕鬆一下,
方案如下:
Intent intent = new Intent(); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); //根據版本號不同使用不同的Action if (Build.VERSION.SDK_INT <19) { intent.setAction(Intent.ACTION_GET_CONTENT); }else { intent.setAction(Intent.ACTION_OPEN_DOCUMENT); } startActivityForResult(intent, REQUEST_CODE);
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode==REQUEST_CODE) { if (null!=data) { Uri uri = data.getData(); //根據需要,也可以加上Option這個引數 InputStream inputStream = getContentResolver().openInputStream(uri); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); } } }
以上方法經不同Android機型測試,均能正常執行,分享出來,希望對碼友們有用!