Java 如何在安卓M上申请访问图库的权限。?

Java 如何在安卓M上申请访问图库的权限。?,java,android,Java,Android,我有这个应用程序,将选择图像库,并显示它的测试使用Imageview。我的问题是它在安卓M上不起作用。我可以选择图像,但不会在测试中显示。他们说我需要获得许可才能在安卓M上访问图像,但不知道如何访问。请提供帮助。从Android 6.0(API级别23)开始,用户在应用程序运行时向应用程序授予权限,而不是在安装应用程序时 键入1-当应用程序请求权限时,系统会向用户显示一个对话框。当用户响应时,系统调用应用程序的onRequestPermissionsResult()方法,并将用户响应传递给它。你

我有这个应用程序,将选择图像库,并显示它的测试使用Imageview。我的问题是它在安卓M上不起作用。我可以选择图像,但不会在测试中显示。他们说我需要获得许可才能在安卓M上访问图像,但不知道如何访问。请提供帮助。

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

键入1-当应用程序请求权限时,系统会向用户显示一个对话框。当用户响应时,系统调用应用程序的onRequestPermissionsResult()方法,并将用户响应传递给它。你的应用程序必须覆盖该方法,以确定是否授予了该权限。回调传递的请求代码与传递给requestPermissions()的请求代码相同

键入2-如果您想在一个位置背对背地授予运行时权限,则可以按照下面的链接进行操作

并在清单中为您的需求添加权限

<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" />
您的活动(或片段)覆盖onRequestPermissionsResult方法:

 @Override
     public void onRequestPermissionsResult(int requestCode, String[] 
    permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions,grantResults);

        // Forward results to EasyPermissions
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
    }
请求权限

private static final int LOCATION_REQUEST = 222;
 @Override
public void onPermissionsGranted(int requestCode, List<String> list) {
    // Some permissions have been granted
    // ...
}

@Override
public void onPermissionsDenied(int requestCode, List<String> list) {
    // Some permissions have been denied
    // ...
}
调用此方法

@AfterPermissionGranted(LOCATION_REQUEST)
private void checkLocationRequest() {
   String[] perms = {Manifest.permission.ACCESS_FINE_LOCATION};
    if (EasyPermissions.hasPermissions(this, perms)) {
        // Already have permission, do the thing
        // ...
    } else {
        // Do not have permissions, request them now
        EasyPermissions.requestPermissions(this,"Please grant permission",
                LOCATION_REQUEST, perms);
    }
}
或者,对于更精细的控件,您可以让您的活动/片段实现PermissionCallbacks接口

实现EasyPermissions.PermissionCallbacks

private static final int LOCATION_REQUEST = 222;
 @Override
public void onPermissionsGranted(int requestCode, List<String> list) {
    // Some permissions have been granted
    // ...
}

@Override
public void onPermissionsDenied(int requestCode, List<String> list) {
    // Some permissions have been denied
    // ...
}
在代码中

        askPermission(
        Manifest.permission.CAMERA,
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
    ) {
       // camera or gallery or TODO
    }.onDeclined { e ->
        if (e.hasDenied()) {
            AlertDialog.Builder(this)
                .setMessage(getString(R.string.grant_permission))
                .setPositiveButton(getString(R.string.yes)) { dialog, which ->
                    e.askAgain()
                } //ask again
                .setNegativeButton(getString(R.string.no)) { dialog, which ->
                    dialog.dismiss()
                }
                .show()
        }

        if (e.hasForeverDenied()) {
            e.goToSettings()
        }
    }
链接->

公共void pickFile(){
int permissionCheck=ContextCompat.checkSelfPermission(getActivity(),
摄像机);
if(permissionCheck!=PackageManager.PERMISSION\u已授予){
ActivityCompat.requestPermissions(
getActivity(),
新字符串[]{CAMERA},
许可证代码
);
返回;
}
openCamera();
}
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull字符串权限[],
@非空int[]grantResults){
if(requestCode==权限\代码){
如果(grantResults.length>0
&&grantResults[0]==PackageManager.PERMISSION\u已授予){
openCamera();
}
}
}
私有void openCamera(){
意向意向=新意向(MediaStore.ACTION\u IMAGE\u CAPTURE);
startActivityForResult(意图、摄像头代码);
}

如果您有写外部存储,则不需要读外部存储。写包括读。@dileepattel抱歉,我对这个有点陌生。您将把java代码放在哪里?也谢谢你的邀请answer@TheincredibleJan根据警告块:这可能会导致IOException,以防这两个权限在未来的Android版本中位于不同的组中。
        askPermission(
        Manifest.permission.CAMERA,
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
    ) {
       // camera or gallery or TODO
    }.onDeclined { e ->
        if (e.hasDenied()) {
            AlertDialog.Builder(this)
                .setMessage(getString(R.string.grant_permission))
                .setPositiveButton(getString(R.string.yes)) { dialog, which ->
                    e.askAgain()
                } //ask again
                .setNegativeButton(getString(R.string.no)) { dialog, which ->
                    dialog.dismiss()
                }
                .show()
        }

        if (e.hasForeverDenied()) {
            e.goToSettings()
        }
    }
public void pickFile() {
        int permissionCheck = ContextCompat.checkSelfPermission(getActivity(),
                CAMERA);
        if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(
                    getActivity(),
                    new String[]{CAMERA},
                    PERMISSION_CODE
            );
            return;
        }
        openCamera();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
                                           @NonNull int[] grantResults) {
        if (requestCode == PERMISSION_CODE) {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                openCamera();
            }
        }
    }

    private void openCamera() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, CAMERA_CODE);
    }


<uses-permission android:name="android.permission.CAMERA" />