大家好,谢谢你们帮我解决问题..
我第一次尝试在应用程序中实现新的Permissions请求,所以我只需要一些帮助..
基本上,我的第1步涉及检查是否已经授予了权限,然后在下一步中请求它(如果尚未授权)。
但我需要检查并确保所有权限我需要的权限被授予,而不仅仅是一个..
所以我所拥有的是检查单一权限的内容:
private void checkPermission() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
// Permission already available, continue to Method "finishPermissionCheck"
finishPermissionCheck();
} else {
// Permission needs to be requested, continue to Method "requestPermission"
requestPermission();
}
}
好的,这只适用于一个权限,但我需要检查 MULTIPLE 权限(如果需要,请求多个权限)..我尝试使用&&包括其余的权限,但无济于事。我也尝试创建一个多个权限的字符串,如下所示..
这是我的尝试看起来.. < / strong>
首先我在范围内创建一个多个权限的字符串(在这种情况下,我只是尝试2个权限):
private static final String[] requiredPermissions = {
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.RECEIVE_BOOT_COMPLETED
};
然后我将权限检查代码更改为如下所示:
private void checkPermission() {
if (ActivityCompat.checkSelfPermission(this, String.valueOf(requiredPermissions))
== PackageManager.PERMISSION_GRANTED) {
// Permission already available, continue to Method "finishPermissionCheck"
finishPermissionCheck();
} else {
// Permission needs to be requested, continue to Method "requestPermission"
requestPermission();
}
}
但是,我不确定这是否是正确的方法。
完成此任务的最佳方式是什么?
..是的主持人,我已经浏览了与此主题相关的其他帖子。
提前感谢您提供任何帮助!
答案 0 :(得分:0)
在您的finishPermissionCheck();
方法中调用以下代码 - &gt;
ActivityCompat.requestPermissions(SendMoneyByDetailsActivity.this, requiredPermissions , REQUEST_CODE);
答案 1 :(得分:0)
您好我最近遇到了同样的问题。我将分享我的实施。在我的情况下,我需要检查所有TWO权限,但它看起来可扩展到我。
MyPermissionHandler.java
// return true if all permissions are granted
public boolean getPermissions() {
// if version is smaller, the permissions in the xml file are enough
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.M) {
return true;
}
// create an array list with needed permissions if they are not granted already
ArrayList<String> perms = new ArrayList<String>() {{
if(!hasCameraPermission()) add(Manifest.permission.CAMERA);
if(!hasWritePermission()) add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}};
if(perms.size()>0) {
ActivityCompat.requestPermissions(activity, perms.toArray(new String[0]), MainActivity.MY_PERMISSIONS_REQUEST_CAMERA);
return false;
} else {
return true;
}
}
private boolean hasCameraPermission() {
return ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED;
}
private boolean hasWritePermission() {
return ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
}
在MainActivity.java中
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
// if at least one permission is denied, finish the activity
for(int permission : grantResults) {
if(permission != PackageManager.PERMISSION_GRANTED) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Error")
.setMessage("This application needs all permissions.")
.setCancelable(false)
.setNeutralButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.show();
return;
}
}
// all permissions are granted
}
如果您需要添加更多权限,则只能更改MyPermissionHandler.java
文件中的代码。希望这可以帮助! :)
顺便说一下,你可以在活动的onResume()方法中添加一些检查,以防用户最小化程序并进入设置以禁用,例如,相机权限。在他回到应用程序并且应用程序试图打开相机后,应用程序将崩溃。所以你必须小心。