Android打开系统相册的问题

来源:互联网 发布:李荣浩戒烟知乎 编辑:程序博客网 时间:2024/05/16 14:09

   在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加上相应的权限,不过

  效果都不太理想。

     在不断搜索,实践的过程,发现在了有一个比较方便高效的解决问题的方法,分享出来,希望遇到同样问题的码友们能快速解决问题,轻松一下,

     方案如下:

    

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1.         Intent intent = new Intent();  
  2. intent.addCategory(Intent.CATEGORY_OPENABLE);  
  3. intent.setType("image/*");  
  4. //根据版本号不同使用不同的Action  
  5. if (Build.VERSION.SDK_INT <19) {  
  6.     intent.setAction(Intent.ACTION_GET_CONTENT);  
  7. }else {  
  8.     intent.setAction(Intent.ACTION_OPEN_DOCUMENT);  
  9. }  
  10. startActivityForResult(intent, REQUEST_CODE);  

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. @Override  
  2. protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  3.     super.onActivityResult(requestCode, resultCode, data);  
  4.     if (requestCode==REQUEST_CODE) {  
  5.             if (null!=data) {  
  6.                 Uri uri = data.getData();  
  7.                 //根据需要,也可以加上Option这个参数  
  8.                 InputStream inputStream = getContentResolver().openInputStream(uri);  
  9.                 Bitmap bitmap = BitmapFactory.decodeStream(inputStream);  
  10.             }  
  11.         }   
  12. }  
0 0
原创粉丝点击