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请检查我在你的帖子上的评论,你很容易理解我说的话。在我的代码中,当我检查权限时,它也会在清单文件中声明。