Android 使用活动获取:一次只能请求一组权限
我制作了一个应用程序,其中有一个摄像头和GPS的请求,但当我执行时,我收到这个警告几次,彼此之间的间隔不到1秒 W/活动:一次只能请求一组权限) 有人能告诉我为什么吗Android 使用活动获取:一次只能请求一组权限,android,android-camera,android-permissions,android-gps,Android,Android Camera,Android Permissions,Android Gps,我制作了一个应用程序,其中有一个摄像头和GPS的请求,但当我执行时,我收到这个警告几次,彼此之间的间隔不到1秒 W/活动:一次只能请求一组权限) 有人能告诉我为什么吗 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); mStatusCamera = intent.get
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
mStatusCamera = intent.getStringExtra("camera");
mScannerView = new ZXingScannerView(this) {
@Override
protected IViewFinder createViewFinderView(Context context) {
return new CustomZXingScannerView(context);
}
};
List<BarcodeFormat> formats = new ArrayList<>();
mListaPassageiros = new ArrayList<>();
formats.add(BarcodeFormat.QR_CODE);
setContentView(mScannerView);
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.M) {
if (!checkPermission()) {
requestPermission();
} else {
executarDepoisDaPermissao();
}
}
}
private boolean checkPermission() {
return (ContextCompat.checkSelfPermission(getApplicationContext(), CAMERA) == PackageManager.PERMISSION_GRANTED
&& ContextCompat.checkSelfPermission(getApplicationContext(), ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
&& ContextCompat.checkSelfPermission(getApplicationContext(), ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED);
}
public void executarDepoisDaPermissao() {
final BancoController crud = new BancoController(getBaseContext());
mConectado = isNetworkAvailable();
}
我可以这样使用吗?因此,我在这里看不到您的
requestPermission()
方法,但您不应该同时发送多个权限请求
您应该使用所有权限发出一个请求
int permissions_code = 42;
String[] permissions = {Manifest.permission.CAMERA, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION};
if(!hasPermissions(this, permissions)){
ActivityCompat.requestPermissions(this, permissions, permissions_code);
}
我认为问题在于,您需要两个位置权限,您应该只要求精细位置,这将对粗糙和精细都有效。对于遇到此问题的任何其他人。。您需要连续请求权限,如下所示:
onRequestPermissionResult(){
case permission1:
if (permission1.aquired()){
....//do what you do
requestPermission2();
}
case permission2:
if (permission2.aquired()){
....//do what you do
requestPermission3();
}
}
只需在清单文件中添加权限并刷新项目 在清单XML文件中添加以下代码:
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION/>
如果您试图在循环中获取权限,则可能会出现此问题-
do {
ActivityCompat.requestPermissions...
}while(some_condition)
在这种情况下,如果条件失败,它可能会再次请求相同的条件。我能够用相同的指令集重现此问题。我有相同的错误,因为我调用了在onCreate
和onResume
中请求权限的函数。我认为它创建了两个权限请求实例,Android系统不希望这样
然后,您应该从您的onResume
(或者从任何其他与活动同时运行的函数onCreate
可以显示requestPermission方法吗?几乎和我的一样,不是吗?但是Android将只显示一个漂亮且动画效果良好的权限对话框。我想这就是目标。对话框上的对话框被认为是一个糟糕的界面实践e、 1次,但会像箭头一样指向下一个。但我没有在其他对话框上显示对话框。或者我是,但我看不到它完成了?我的计算机现在已关闭。我将尝试后一种方法。我迫不及待。是的,这就是问题所在。ThxB但有时您需要相互排斥的权限。为此,请查找Vitor Hugo SchwaabYep的答案-如果您的不能将代码安排为在一次调用中请求所有权限,那么您必须编写一堆难看的代码来序列化您的权限请求,以便一次只有一个未完成的调用(如果Android能够处理好这一点,而不是每个应用程序都必须重新发明轮子,那会更好)
do {
ActivityCompat.requestPermissions...
}while(some_condition)