Android打開系統相冊的問題




     在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機型測試,均能正常運行,分享出來,希望對碼友們有用!
                    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章