android 23 uri permission denial

时间:2016-03-28 14:22:27

标签: uri android-permissions

我有一个执行以下操作的代码:

  1. 我在清单中获得了READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE
  2. 我从您选择的手机中获取照片,并将其放入片段并插入到viewpager中。
  3. 在下面的sdk 22上工作正常。
  4. 但是在Android 23上它继续说
  5. 权限否认java.lang.SecurityException:Permission Denial:从ProcessRecord打开提供程序com.google.android.apps.photos.contentprovioder.MediaContentProvider

    这是指我在片段页面中的代码

    / *********************

    bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri),null,option);

    我把它放在reSize()方法里面

    ********************** /

    1. 我试图阅读开发控制台文档,并注意我们需要检查权限并询问用户。
    2. 我的问题是 1.我应该问哪个权限,我试过READ和WRITE 2.我应该在哪里包围检查权限,它是在方法之外?或者只围绕这条线。

      if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
      
                  int hasPermission = checkSelfPermission(context,
                          Manifest.permission.READ_EXTERNAL_STORAGE);
      
                  if (hasPermission != PackageManager.PERMISSION_GRANTED) {
      
      
                      requestPermissions(
                              new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                              RESULT_PERMS_INITIAL);
      
                  } else {
      
                      bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri), null, option);
                  }
              } else {
      
                  bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri), null, option);
              }
      

      并根据结果要求

      public void onRequestPermissionsResult(int requestCode,
                                             String[] permissions,
                                             int[] grantResults) {
      
          if (requestCode == RESULT_PERMS_INITIAL) {
      
              if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
      
                  bitmap = resizeBitmap(uri, getActivity().getApplicationContext());
              }
      
              else {
      
                  Toast.makeText(context, "error", Toast.LENGTH_SHORT).show();
              }
          }
          else {
              super.onRequestPermissionsResult(requestCode, permissions, grantResults);
          }
      }
      

1 个答案:

答案 0 :(得分:0)

对于API-23 Android引入了新的权限类型。你应该阅读this

例如,请点击这些页面

我希望,它会对你有用。