Android 一次一个请求多个权限
代码只显示第一个权限的对话框,而不显示其他两个权限的对话框。除了此之外,我如何以更简单的方式处理多个请求,应用程序每次提示一个权限 请求许可的代码如下所示:Android 一次一个请求多个权限,android,android-permissions,Android,Android Permissions,代码只显示第一个权限的对话框,而不显示其他两个权限的对话框。除了此之外,我如何以更简单的方式处理多个请求,应用程序每次提示一个权限 请求许可的代码如下所示: package com.example.hp.requesting_permissions; import android.Manifest; import android.content.pm.PackageManager; import android.support.annotation.NonNull; import androi
package com.example.hp.requesting_permissions;
import android.Manifest;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
} else {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}
} else {
Toast.makeText(MainActivity.this, "Denied", Toast.LENGTH_SHORT).show();
}
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION)) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 2);
} else {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 2);
}
} else {
Toast.makeText(MainActivity.this, "denied", Toast.LENGTH_SHORT).show();
}
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.INTERNET)) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.INTERNET}, 3);
} else {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.INTERNET}, 3);
}
} else {
Toast.makeText(MainActivity.this, "denied", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this, "Granted", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Denied", Toast.LENGTH_SHORT).show();
}
}
}
break;
case 2: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this, "Granted", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Granted", Toast.LENGTH_SHORT).show();
}
}
}
break;
case 3: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.INTERNET) == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this, "Granted", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Denied", Toast.LENGTH_SHORT).show();
}
}
}
break;
}
}
}
这里它会询问所有权限
public class RequestUserPermission {
private Activity activity;
// Storage Permissions
private static final int REQUEST_PERMISSION = 1;
private static String[] PERMISSIONS = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
};
public RequestUserPermission(Activity activity) {
this.activity = activity;
}
public boolean verifyStoragePermissions() {
// Check if we have write permission
int permissionWrite = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
int permissionRead = ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE);
if ((permissionWrite != PackageManager.PERMISSION_GRANTED) ||
(permissionRead != PackageManager.PERMISSION_GRANTED)) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
activity,
PERMISSIONS,
REQUEST_PERMISSION
);
return false;
}else{
return true;
}
}
public void providePermission(){
verifyStoragePermissions();
}
public void forceFullOpenPermission(){
if(!verifyStoragePermissions()){
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", activity.getPackageName(), null);
intent.setData(uri);
activity.startActivityForResult(intent, REQUEST_PERMISSION);
}
}
}
这里它会询问所有权限
public class RequestUserPermission {
private Activity activity;
// Storage Permissions
private static final int REQUEST_PERMISSION = 1;
private static String[] PERMISSIONS = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
};
public RequestUserPermission(Activity activity) {
this.activity = activity;
}
public boolean verifyStoragePermissions() {
// Check if we have write permission
int permissionWrite = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
int permissionRead = ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE);
if ((permissionWrite != PackageManager.PERMISSION_GRANTED) ||
(permissionRead != PackageManager.PERMISSION_GRANTED)) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
activity,
PERMISSIONS,
REQUEST_PERMISSION
);
return false;
}else{
return true;
}
}
public void providePermission(){
verifyStoragePermissions();
}
public void forceFullOpenPermission(){
if(!verifyStoragePermissions()){
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", activity.getPackageName(), null);
intent.setData(uri);
activity.startActivityForResult(intent, REQUEST_PERMISSION);
}
}
}
像这样
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
&& checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED
&& checkSelfPermission(Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED
&& checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
&& checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED
&& checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED
&& checkSelfPermission(Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(SelectUserActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CALL_PHONE,
Manifest.permission.CAMERA,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.READ_CONTACTS,
Manifest.permission.READ_SMS
},
10);
return;
}
}
像这样
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
&& checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED
&& checkSelfPermission(Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED
&& checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
&& checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED
&& checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED
&& checkSelfPermission(Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(SelectUserActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CALL_PHONE,
Manifest.permission.CAMERA,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.READ_CONTACTS,
Manifest.permission.READ_SMS
},
10);
return;
}
}
您可以根据需要更改
权限来使用这段代码,也可以根据需要进行自定义
将这些代码添加到类顶-全局
private static final int REQUEST_PERMISSION = 1;
private static String[] PERMISSIONS_ARR = {
Manifest.permission.READ_CONTACTS,
Manifest.permission.WRITE_CONTACTS,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.PACKAGE_USAGE_STATS
};
在需要请求权限的功能下方调用
public void askForPermission()
{
// Verify that all required contact permissions have been granted.
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_CONTACTS) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, PERMISSIONS_ARR, REQUEST_PERMISSION);
}
else
{
// Permission already given do whatever you want...
}
}
添加以下代码以跟踪用户授予的权限和拒绝的权限。据此做出决定。
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
{
if (requestCode == REQUEST_PERMISSION)
{
// for each permission check if the user grantet/denied them
// you may want to group the rationale in a single dialog,
// this is just an example
int count = 0;
for (int i = 0, len = permissions.length; i < len; i++)
{
String permission = permissions[i];
if (grantResults[i] == PackageManager.PERMISSION_GRANTED)
{
count++;
}
else
{
//Permission denied you can ask it for again.
}
}
if (count == permissions.length)
{
// All permission granted
}
else
{
// Not all permission granted, controlled launch of application.
}
}
}
public void onRequestPermissionsResult(int-requestCode,String[]permissions,int[]grantResults)
{
if(requestCode==请求权限)
{
//对于每个权限,检查用户是否授予/拒绝它们
//您可能希望在单个对话框中对基本原理进行分组,
//这只是一个例子
整数计数=0;
for(int i=0,len=permissions.length;i
您可以根据需要更改权限来使用此代码,也可以根据需要自定义此代码
将这些代码添加到类顶-全局
private static final int REQUEST_PERMISSION = 1;
private static String[] PERMISSIONS_ARR = {
Manifest.permission.READ_CONTACTS,
Manifest.permission.WRITE_CONTACTS,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.PACKAGE_USAGE_STATS
};
在需要请求权限的功能下方调用
public void askForPermission()
{
// Verify that all required contact permissions have been granted.
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_CONTACTS) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, PERMISSIONS_ARR, REQUEST_PERMISSION);
}
else
{
// Permission already given do whatever you want...
}
}
添加以下代码以跟踪用户授予的权限和拒绝的权限。据此做出决定。
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
{
if (requestCode == REQUEST_PERMISSION)
{
// for each permission check if the user grantet/denied them
// you may want to group the rationale in a single dialog,
// this is just an example
int count = 0;
for (int i = 0, len = permissions.length; i < len; i++)
{
String permission = permissions[i];
if (grantResults[i] == PackageManager.PERMISSION_GRANTED)
{
count++;
}
else
{
//Permission denied you can ask it for again.
}
}
if (count == permissions.length)
{
// All permission granted
}
else
{
// Not all permission granted, controlled launch of application.
}
}
}
public void onRequestPermissionsResult(int-requestCode,String[]permissions,int[]grantResults)
{
if(requestCode==请求权限)
{
//对于每个权限,检查用户是否授予/拒绝它们
//您可能希望在单个对话框中对基本原理进行分组,
//这只是一个例子
整数计数=0;
for(int i=0,len=permissions.length;i
即使您正在使用棉花糖(它是仅定义的清单文件),也无法从用户处获得internet和位置权限。但您可以一次访问一个权限,然后请检查下面的脚本。添加了答案供您参考,您可以根据需要自定义它。您需要将所有权限放在AndroidManifest.xml
中,这里只有关键/危险组权限会被删除。您可以了解更多关于权限组[here]internet和位置的信息,即使您使用的是marshmallow,它的仅定义清单文件,用户也无法获得该权限组的位置权限。但您可以一次访问一个权限,然后请检查下面的脚本。添加了答案供您参考,您可以根据需要自定义它。您需要将所有权限放在AndroidManifest.xml
中,这里只有关键/危险组权限会被删除。你可以了解更多关于权限组的信息[here]@Akshansh请查看我在你帖子上的评论,你很容易理解我说的话。在我的代码中,当我检查权限时,它也会在清单文件中声明。@Akshansh请检查我在你的帖子上的评论,你很容易理解我说的话。在我的代码中,当我检查权限时,它也会在清单文件中声明。