Android动态权限授予

配置文件添加权限

首先打开AndroidManifest.xml文件,如下所示添加你想要的权限:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <!在这里添加你要权限>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyApplication">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

权限类的编写


import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Build;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.util.ArrayList;
import java.util.List;

public class Permission {
    public static int Requet_Code=100;
    
    //1.将你上一步所添加的权限放在数组里
    private  String[] permissio={  
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.READ_EXTERNAL_STORAGE
    };
    
    private List<String> permissionList=new ArrayList<>();

    public void   CheckPermissio(Activity activity){
    //2.判断当前设备的Android系统在Android 6以上
        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
        //3.循环判断一下当前设备是否已有这些权限
            for (int i = 0; i < permissio.length; i++) {
                if(ContextCompat.checkSelfPermission(activity,permissio[i])!= PackageManager.PERMISSION_GRANTED){
                //4.如果没有,就添加到这个新的权限数组里
                    permissionList.add(permissio[i]);
                }
            }
          if(permissionList.size()>0){
          //5.如果这个新的权限数组的大小大于0,就进行授权
              requestPermissions(activity);
          }
        }
    }

    private void requestPermissions(Activity activity) {
        //6.这里的三个参数分别是活动、权限和请求码(随便什么数值)
        ActivityCompat.requestPermissions(activity,permissionList.toArray(new String[permissionList.size()]),Requet_Code);
    }
}

在主活动文件类调用

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.example.myapplication.base.Permission;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //1.先声明对象
        Permission permission=new Permission();
        //2.调用方法,参数设置为当前页面
        permission.CheckPermissio(this);
    }


}

重写权限返回值方法

返回方法的重写可以参照这个代码,原博客:Android 动态申请权限

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
	    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
	    
	    if (requestCode == 1) {
		    for (int i = 0; i < permissions.length; i++) {
		    if (grantResults[i] == PERMISSION_GRANTED) {//选择了“始终允许”
		    Toast.makeText(this, "" + "权限" + permissions[i] + "申请成功", Toast.LENGTH_SHORT).show();
		    } else {
	    if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[i])){//用户选择了禁止不再询问
	    
		    AlertDialog.Builder builder = new AlertDialog.Builder(PermissionActivity.this);
		    builder.setTitle("permission")
		    .setMessage("点击允许才可以使用我们的app哦")
		    .setPositiveButton("去允许", new DialogInterface.OnClickListener() {
		    public void onClick(DialogInterface dialog, int id) {
		    if (mDialog != null && mDialog.isShowing()) {
		    mDialog.dismiss();
		    }
		    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
		    Uri uri = Uri.fromParts("package", getPackageName(), null);//注意就是"package",不用改成自己的包名
		    intent.setData(uri);
		    startActivityForResult(intent, NOT_NOTICE);
		    }
	    });
	    mDialog = builder.create();
	    mDialog.setCanceledOnTouchOutside(false);
	    mDialog.show();
	    
	    
	    
	    }else {//选择禁止
	    AlertDialog.Builder builder = new AlertDialog.Builder(PermissionActivity.this);
	    builder.setTitle("permission")
	    .setMessage("点击允许才可以使用我们的app哦")
	    .setPositiveButton("去允许", new DialogInterface.OnClickListener() {
	    public void onClick(DialogInterface dialog, int id) {
	    if (alertDialog != null && alertDialog.isShowing()) {
	    alertDialog.dismiss();
	    }
	    ActivityCompat.requestPermissions(PermissionActivity.this,
	    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
	    }
	    });
	    alertDialog = builder.create();
	    alertDialog.setCanceledOnTouchOutside(false);
	    alertDialog.show();
	    }
	    
	    }
	    }
	    }
    }

在当前活动再次判断

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	    super.onActivityResult(requestCode, resultCode, data);
	    if(requestCode==NOT_NOTICE){
	    permission.CheckPermissio(this);//由于不知道是否选择了允许所以需要再次判断,将permission设置全局对象
	    }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知 不知

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值