Android请求权限只请求第一个
Android request permissions request only the first one
我在 Android 应用程序中工作,我已经在我的 Activity
.
中声明了方法 requestAppPermissions
好吧,这段代码发生了什么,出于某种原因,它请求第一个(在本例中为位置)并跳过其他;但是,我将一些其他权限移至第一个 if
该方法请求第一个,跳过其他权限。
我的代码有什么问题?
public void requestAppPermissions(){
if (Build.VERSION.SDK_INT >= 21) {
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.ACCESS_FINE_LOCATION)) {
//El usuario denegó los permisos con el botón "Don't show again!!!"
startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID)));
} else {
//Se solicita el permiso al usuario
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}
}else{
LocationManager lm = (LocationManager) this.getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if(location != null){
Double latitude = location.getLatitude();
Double longitude = location.getLongitude();
//new MapFunctions().RecenterMap(googleMap, new LatLng(latitude, longitude), 14, "");
LOCATION_CENTER = new LatLng(latitude, longitude);
// Toast.makeText(MainActivity.this, "latitude: " + latitude + " - longitude" + longitude, Toast.LENGTH_LONG).show();
}
}
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.CAMERA)) {
startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID)));
} else {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.CAMERA}, 2);
}
}
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID)));
} else {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 3);
}
}
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.READ_EXTERNAL_STORAGE)) {
startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID)));
} else {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 4);
}
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case 1: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
Toast.makeText(NSActivity.this, "Feature enabled", Toast.LENGTH_SHORT).show();
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(NSActivity.this, "Feature disabled", Toast.LENGTH_SHORT).show();
}
return;
}
case 2: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(NSActivity.this, "Feature enabled", Toast.LENGTH_SHORT).show();
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(NSActivity.this, "Feature disabled", Toast.LENGTH_SHORT).show();
}
return;
}
case 3: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
Toast.makeText(NSActivity.this, "Feature enabled", Toast.LENGTH_SHORT).show();
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(NSActivity.this, "Feature disabled", Toast.LENGTH_SHORT).show();
}
return;
}
case 4: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
Toast.makeText(NSActivity.this, "Feature enabled", Toast.LENGTH_SHORT).show();
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(NSActivity.this, "Feature disabled", Toast.LENGTH_SHORT).show();
}
return;
}
}
}
类似的内容可能会有所帮助...
String[] neededPermissions = new String[]{
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.CAMERA,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE //if you can write, you can read
}
public static List<String> getPermissionsRequest(@NonNull Context context,
@NonNull String[] permissions){
List<String> permissionsToRequest = new ArrayList<>();
for (int i = 0; i < permissions.length; i++){
if (ContextCompat.checkSelfPermission(context, permissions[i])
!= PackageManager.PERMISSION_GRANTED){
permissionsToRequest.add(permissions[i]);
}
}
return permissionsToRequest;
}
//now in the onCreate of your Activity you can do something like this:
List<String> permissionsToRequest = getPermissionsRequest(this, neededPermissions);
//if permissionsToRequest size is > 0 you need some more permission(s)
if (permissionsToRequest.size() > 0){
ActivityCompat.requestPermissions(MainActivity.this,
permissionsToRequest.toArray(new String[0]), PERMISSION_ALL_REQUEST_CODE);
}
//now in the onRequestPermissionsResult you can handle everything
//as always and proceeed if everything is ok
我目前还没有测试过这个,但应该可以工作
我在 Android 应用程序中工作,我已经在我的 Activity
.
requestAppPermissions
好吧,这段代码发生了什么,出于某种原因,它请求第一个(在本例中为位置)并跳过其他;但是,我将一些其他权限移至第一个 if
该方法请求第一个,跳过其他权限。
我的代码有什么问题?
public void requestAppPermissions(){
if (Build.VERSION.SDK_INT >= 21) {
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.ACCESS_FINE_LOCATION)) {
//El usuario denegó los permisos con el botón "Don't show again!!!"
startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID)));
} else {
//Se solicita el permiso al usuario
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}
}else{
LocationManager lm = (LocationManager) this.getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if(location != null){
Double latitude = location.getLatitude();
Double longitude = location.getLongitude();
//new MapFunctions().RecenterMap(googleMap, new LatLng(latitude, longitude), 14, "");
LOCATION_CENTER = new LatLng(latitude, longitude);
// Toast.makeText(MainActivity.this, "latitude: " + latitude + " - longitude" + longitude, Toast.LENGTH_LONG).show();
}
}
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.CAMERA)) {
startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID)));
} else {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.CAMERA}, 2);
}
}
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID)));
} else {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 3);
}
}
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.READ_EXTERNAL_STORAGE)) {
startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID)));
} else {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 4);
}
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case 1: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
Toast.makeText(NSActivity.this, "Feature enabled", Toast.LENGTH_SHORT).show();
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(NSActivity.this, "Feature disabled", Toast.LENGTH_SHORT).show();
}
return;
}
case 2: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(NSActivity.this, "Feature enabled", Toast.LENGTH_SHORT).show();
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(NSActivity.this, "Feature disabled", Toast.LENGTH_SHORT).show();
}
return;
}
case 3: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
Toast.makeText(NSActivity.this, "Feature enabled", Toast.LENGTH_SHORT).show();
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(NSActivity.this, "Feature disabled", Toast.LENGTH_SHORT).show();
}
return;
}
case 4: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
Toast.makeText(NSActivity.this, "Feature enabled", Toast.LENGTH_SHORT).show();
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(NSActivity.this, "Feature disabled", Toast.LENGTH_SHORT).show();
}
return;
}
}
}
类似的内容可能会有所帮助...
String[] neededPermissions = new String[]{
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.CAMERA,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE //if you can write, you can read
}
public static List<String> getPermissionsRequest(@NonNull Context context,
@NonNull String[] permissions){
List<String> permissionsToRequest = new ArrayList<>();
for (int i = 0; i < permissions.length; i++){
if (ContextCompat.checkSelfPermission(context, permissions[i])
!= PackageManager.PERMISSION_GRANTED){
permissionsToRequest.add(permissions[i]);
}
}
return permissionsToRequest;
}
//now in the onCreate of your Activity you can do something like this:
List<String> permissionsToRequest = getPermissionsRequest(this, neededPermissions);
//if permissionsToRequest size is > 0 you need some more permission(s)
if (permissionsToRequest.size() > 0){
ActivityCompat.requestPermissions(MainActivity.this,
permissionsToRequest.toArray(new String[0]), PERMISSION_ALL_REQUEST_CODE);
}
//now in the onRequestPermissionsResult you can handle everything
//as always and proceeed if everything is ok
我目前还没有测试过这个,但应该可以工作