カメラとGPSを要求するアプリを作成しましたが、実行すると、この警告が1秒未満で数回表示されます。
アクティビティ:一度に要求できる権限のセットは1つだけです)
誰かが理由を教えてもらえますか?
@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);
}
}
}
そのように使用できますか?
問題は、2つの場所のアクセス許可を要求することだと思います。粗いものと細かいものの両方で機能する細かい場所のみを要求する必要があります。
そのため、ここからrequestPermission()
メソッドを見ることができませんが、同時に複数の許可リクエストを送信しないでください。
すべての権限で1つのリクエストを行う必要があります。
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();
}
}