我目前正在使用Android Studio中的权限。
我已经检查了教程是如何做到的,而且我已经看到它真的很讨厌而且很长。目前的代码是:
String[] InternetPermission = new String[]{Manifest.permission.INTERNET};
if (ContextCompat.checkSelfPermission(ViewingWindow.this, Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(ViewingWindow.this,
Manifest.permission.INTERNET)) {
InternetExplanation();
} else {
ActivityCompat.requestPermissions(ViewingWindow.this,
new String[]{Manifest.permission.INTERNET},
MY_PERMISSIONS_REQUEST_INTERNET);
}
}
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_INTERNET: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] != PackageManager.PERMISSION_GRANTED){
this.finishAffinity();
}
}
}
}
在我看来,对于单一的权限检查,这显然相当长。我一直想知道为什么整个权限检查不是简单的if语句检查。
权限检查是否有这么长的原因?如果没有,有没有办法尝试优化它?
修改 我注意到我得到了投票。我不太清楚你为什么要投票,因为你还没有发表任何评论......如果你能评论为什么这个问题无效,请解释。
答案 0 :(得分:2)
在API 23或Android 6.0
中,我们必须征得用户的许可,您最好知道。
如果用户需要单一权限,那么您必须向用户询问
ContextCompat.checkSelfPermission(ViewingWindow.this, Manifest.permission.INTERNET)
出现此行。ActivityCompat.requestPermissions(ViewingWindow.this,
new String[]{Manifest.permission.INTERNET},
MY_PERMISSIONS_REQUEST_INTERNET);
这条线出现了。public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_INTERNET: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] != PackageManager.PERMISSION_GRANTED){
this.finishAffinity();
}
}
}
因此,您每次都没有为单一权限编写所有代码,因此您只需编写一次并使用OOP功能/功能。
答案 1 :(得分:1)
我认为这对你有帮助......
<强> https://github.com/nilsorathiya/RuntimePermissionForAndroidMPlus 强>
答案 2 :(得分:0)
查看Github回购。
https://github.com/anshulagarwal06/Simplify-Permissions
易于使用并支持所有对话检查。
功能
使用自定义消息的InBuild Rational Dialog InBuild SettingScreen对话框,带有自定义消息。 回拨权限状态: 许可授予 权限已删除 删除了权限访问权限。