问题
I made an app that have a request for camera and GPS, but when I execute I am getting this warning several times with less than 1 second of each other.
W/Activity: Can reqeust only one set of permissions at a time)
Can some one tell me why?
@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();
}
Added RequestPermissio as requested.
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);
}
}
}
Can I use it that way?
回答1:
I think problem is that you ask for two location permissions, you should ask only for fine location which will work for both coarse and fine.
回答2:
So, I can't see your requestPermission()
method from here, but you shouldn't send multiple permission requests in the same time.
You should make ONE request with ALL the permissions.
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);
}
回答3:
For anyone else stumbling upon this issue..You need to request permissions serially,like this:
onRequestPermissionResult(){
case permission1:
if (permission1.aquired()){
....//do what you do
requestPermission2();
}
case permission2:
if (permission2.aquired()){
....//do what you do
requestPermission3();
}
}
来源:https://stackoverflow.com/questions/42035244/getting-w-activity-can-request-only-one-set-of-permissions-at-a-time