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

Rog*_*rim 9 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();
}
Run Code Online (Sandbox Code Playgroud)

根据要求添加了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);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

我可以这样使用吗?

Vit*_*aab 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);
}
Run Code Online (Sandbox Code Playgroud)

  • 几乎。但 Android 只会显示一个漂亮且动画良好的权限对话框。我想这就是目标。对话之上的对话被认为是一种不好的界面实践。 (2认同)

Dom*_*čič 6

我认为问题在于您要求两个位置权限,您应该只要求精细位置,这对粗略和精细都有效。