Java 如何在安卓M上申请访问图库的权限。?
我有这个应用程序,将选择图像库,并显示它的测试使用Imageview。我的问题是它在安卓M上不起作用。我可以选择图像,但不会在测试中显示。他们说我需要获得许可才能在安卓M上访问图像,但不知道如何访问。请提供帮助。从Android 6.0(API级别23)开始,用户在应用程序运行时向应用程序授予权限,而不是在安装应用程序时 键入1-当应用程序请求权限时,系统会向用户显示一个对话框。当用户响应时,系统调用应用程序的onRequestPermissionsResult()方法,并将用户响应传递给它。你的应用程序必须覆盖该方法,以确定是否授予了该权限。回调传递的请求代码与传递给requestPermissions()的请求代码相同 键入2-如果您想在一个位置背对背地授予运行时权限,则可以按照下面的链接进行操作 并在清单中为您的需求添加权限Java 如何在安卓M上申请访问图库的权限。?,java,android,Java,Android,我有这个应用程序,将选择图像库,并显示它的测试使用Imageview。我的问题是它在安卓M上不起作用。我可以选择图像,但不会在测试中显示。他们说我需要获得许可才能在安卓M上访问图像,但不知道如何访问。请提供帮助。从Android 6.0(API级别23)开始,用户在应用程序运行时向应用程序授予权限,而不是在安装应用程序时 键入1-当应用程序请求权限时,系统会向用户显示一个对话框。当用户响应时,系统调用应用程序的onRequestPermissionsResult()方法,并将用户响应传递给它。你
<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" />