获取W / Activity:一次只能请求一组权限

时间:2017-02-04 00:44:09

标签: android android-camera android-permissions android-gps

我制作了一个有摄像头和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);
        }
    }

}

我可以这样使用吗?

6 个答案:

答案 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 同时运行的任何其他函数)中删除权限请求。