Android检测权限并询问

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linxinfa/article/details/89396663

Android 6.0以后,用户可以动态关闭应用的一些权限,假设现在我们有个功能要求有READ_PHONE_STATE权限,我们必须先判断用户是否开启了权限,如果没有开启,要提示用户进行开启。
代码如下

package com.linxinfa.demo;

import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;

import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.NonNull;

import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MyActivity extends Activity
{

    @TargetApi(Build.VERSION_CODES.M)
    private void checkAndRequestPermission() 
    {
        List<String> lackedPermission = new ArrayList<String>();
        // 例:要求有Manifest.permission.READ_PHONE_STATE权限
        if (!(checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED)) 
        {
             lackedPermission.add(Manifest.permission.READ_PHONE_STATE);
        }

        if (lackedPermission.size() == 0) 
        {
            // 已经有了权限
              
        }
        else 
        {
            // 请求所缺少的权限,在onRequestPermissionsResult中再看是否获得权限,如果获得权限就可以调用logAction,否则申请到权限之后再调用。
            String[] requestPermissions = new String[lackedPermission.size()];
            lackedPermission.toArray(requestPermissions);
            requestPermissions(requestPermissions, 1024);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) 
    {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 1024 && hasAllPermissionsGranted(grantResults)) 
        {
            // 获得用户授权
            
        }
        else 
        {
            // 如果用户没有授权,那么应该说明意图,引导用户去设置里面授权。
            Toast.makeText(this, "应用缺少必要的权限!请点击\"权限\",打开所需要的权限。", Toast.LENGTH_LONG).show();
            Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            intent.setData(Uri.parse("package:" + getPackageName()));
            startActivity(intent);
            finish();
        }
    }
}



猜你喜欢

转载自blog.csdn.net/linxinfa/article/details/89396663