如何解决在尝试向用户请求权限时如何避免制作意大利面条式代码?
您能解释一下我该怎么做吗?我发现这完全是胡说八道。因此,我试图制作一个“欢迎屏幕”,在该屏幕中将要求用户授予一些位置权限。在我删除所有内容并再次启动之前,再次遇到相同的问题-当用户已经授予权限时, FusedLocationProviderClient 中的代码仍然想检查权限是否已被授予(!)。我做错了吗?看一些例子:
String[] mPermissions = {Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION};
FusedLocationProviderClient mClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome_screen);
mClient = LocationServices.getFusedLocationProviderClient(this);
checkPermissions();
}
private void checkPermissions() {
if (EasyPermissions.hasPermissions(this,mPermissions)) {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// Activity#requestPermissions
// here to request the missing permissions,and then overriding
// public void onRequestPermissionsResult(int requestCode,String[] permissions,// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for Activity#requestPermissions for more details.
return;
}
mClient.getLastLocation().addOnSuccessListener(this,new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
//TODO
}
}
);
}
}
@Override
public void onPermissionsGranted(int requestCode,@NonNull List<String> perms) {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// Activity#requestPermissions
// here to request the missing permissions,and then overriding
// public void onRequestPermissionsResult(int requestCode,// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for Activity#requestPermissions for more details.
return;
}
mClient.getLastLocation().addOnSuccessListener(this,new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
}
}
);
}
@Override
public void onPermissionsDenied(int requestCode,@NonNull List<String> perms) {}
如何让它一次运行而无需多个请求权限?
解决方法
我不确定我是否正确理解了这个问题,但是根据我的理解:
如果您不希望在授予权限后检查权限,则可以创建一个布尔值hasPermission,并在调用该方法进行检查之前,添加一个if语句。
if(!hasPermission) checkPermissions();
在checkPermissions方法内部,如果它检测到已授予权限,则只需将hasPermission = true设置即可,因为if条件将不再为true,因此它将不再进行检查。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。