配置文件添加权限
首先打开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设置全局对象
}
}