我制作了一个有摄像头和GPS请求的应用程序,但是当我执行时,我会多次收到此警告,并且彼此间隔不到1秒。
W / Activity:一次只能获取一组权限
有人可以告诉我为什么吗?
@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();
}
按要求添加了RequestPermissio。
private void requestPermission() {
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.M) {
if (!checkPermission()) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION}, ASK_MULTIPLE_PERMISSION_REQUEST_CODE);
}
}
}
我可以这样使用吗?
答案 0 :(得分:9)
因此,我无法从此处看到您的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);
}
答案 1 :(得分:4)
我认为问题在于你要求两个位置权限,你应该只询问精确的位置,这对粗略和精细都有效。
答案 2 :(得分:0)
对于其他任何绊倒此问题的人。您需要按顺序请求权限,如下所示:
onRequestPermissionResult(){
case permission1:
if (permission1.aquired()){
....//do what you do
requestPermission2();
}
case permission2:
if (permission2.aquired()){
....//do what you do
requestPermission3();
}
}
答案 3 :(得分:0)
只需在清单文件中添加权限并刷新项目
将此代码添加到清单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/>
答案 4 :(得分:0)
如果您尝试在循环中获取权限,则可能会重现该问题 -
do {
ActivityCompat.requestPermissions...
}while(some_condition)
在这种情况下,如果条件失败,它可能会再次请求相同的条件。我能够用相同的指令集重现这个问题。
答案 5 :(得分:0)
我遇到了同样的错误,因为我在 onCreate
中调用了在 onResume
AND 中请求权限的函数。我认为它创建了两个权限请求实例,而 Android 系统不希望那样。
然后,您应该从您的 onResume
(或将与您的活动 onCreate
同时运行的任何其他函数)中删除权限请求。