如何获得访问android M.画廊的权限?

Cri*_*ssy 7 java android

我有这个应用程序,它将选择图像到库,并使用Imageview将其显示给测试.我的问题是它不适用于Android M.我可以选择图像,但不会显示在我的测试.他们说我需要获得访问Android M上的图像的权限,但不知道如何.请帮忙.

Dil*_*tel 22

从Android 6.0(API级别23)开始,用户在应用程序运行时向应用程序授予权限,而不是在安装应用程序时.

类型1-当您的应用请求权限时,系统会向用户显示一个对话框.当用户响应时,系统会调用您应用的onRequestPermissionsResult()方法,并向其传递用户响应.您的应用必须覆盖该方法才能确定是否已授予权限.回调传递给您传递给requestPermissions()的相同请求代码.

private static final int PICK_FROM_GALLERY = 1;

ChoosePhoto.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick (View v){
    try {
        if (ActivityCompat.checkSelfPermission(EditProfileActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(EditProfileActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, PICK_FROM_GALLERY);
        } else {
            Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(galleryIntent, PICK_FROM_GALLERY);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
  }
});


@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults)
    {
       switch (requestCode) {
            case PICK_FROM_GALLERY:
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                  Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                  startActivityForResult(galleryIntent, PICK_FROM_GALLERY);
                } else {
                    //do something like displaying a message that he didn`t allow the app to access gallery and you wont be able to let him select from gallery
                }
                break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

类型2-如果要在一个地方背靠背提供运行时权限,则可以按照以下链接进行操作

Android 6.0多重权限

并在Manifest中添加对您的要求的权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
Run Code Online (Sandbox Code Playgroud)

注意 -如果Manifest.permission.READ_EXTERNAL_STORAGE产生错误,请将其替换为android.Manifest.permission.READ_EXTERNAL_STORAGE.

==>如果您想了解有关运行时权限的更多信息,请点击以下链接

https://developer.android.com/training/permissions/requesting.html

  • 如果你有WRITE_EXTERNAL_STORAGE,你不需要READ_EXTERNAL_STORAGE.WRITE包括READ. (3认同)
  • @TheincredibleJan根据警告栏:https://developer.android.com/guide/topics/permissions/overview#perm-groups这可能会导致IOException,以防这两个权限在未来的Android版本中位于单独的组中。 (2认同)