Android 动态权限申请,直接复制下列代码即使用
1. 创建 BaseActivity.java 粘贴列代码
本类完成了所有权限申请功能
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.provider.Settings;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.util.ArrayList;
import java.util.List;
public abstract class BaseActivity extends AppCompatActivity {
/**
* 已经获取所有权限
*/
public abstract void startmain();
private static final int MY_PERMISSIONS_REQUEST_CALL_CAMERA = 2;
//需要申请的动态权限
String[] permissions = new String[]{
Manifest.permission.INTERNET,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO,
Manifest.permission.ACCESS_WIFI_STATE,
Manifest.permission.CHANGE_NETWORK_STATE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.MODIFY_AUDIO_SETTINGS,
Manifest.permission.VIBRATE,
Manifest.permission.CHANGE_WIFI_STATE,
Manifest.permission.BROADCAST_STICKY,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.CAMERA
};
// 声明一个集合,在后面的代码中用来存储用户拒绝授权的权
List<String> mPermissionList = new ArrayList<>();
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
doNext(grantResults);
}
private void doNext(int[] grantResults) {
for (int i = 0; i < grantResults.length; i++) {
if (grantResults[i] == -1) {
mToast(getApplicationContext(), "必须打开所需权限才可使用本软件");
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri1 = Uri.fromParts("package", BaseActivity.this.getPackageName(), null);
intent.setData(uri1);
startActivity(intent);
finish();
return;
}
}
startmain();
}
private void mToast(Context applicationContext, String str) {
Toast.makeText(applicationContext,str,Toast.LENGTH_SHORT).show();
}
public void quanxian() {
mPermissionList.clear();
for (int i = 0; i < permissions.length; i++) {
if (ContextCompat.checkSelfPermission(BaseActivity.this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
mPermissionList.add(permissions[i]);
}
}
if (mPermissionList.isEmpty()) {//未授予的权限为空,表示都授予了
startmain();
} else {//请求权限方法
mToast(getApplicationContext(), "必须开启相应权限才可使用此软件!");
String[] permissions = mPermissionList.toArray(new String[mPermissionList.size()]);//将List转为数组
ActivityCompat.requestPermissions(BaseActivity.this, permissions, MY_PERMISSIONS_REQUEST_CALL_CAMERA);
}
}
}
2.在 AndroidManifest.xml 加入所需要的权限
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
3.在 MainActivity 继承 BaseActivity 重写 startmain() 方法,在 onCreate() 调用 quanxian()。
在 onCreate 内调用 quanxian() 方法 执行动态权限申请 , 权限都获得后自动执行 startmain()方法内的代码。
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//在这里调用执行权限申请代码
quanxian();
}
@Override
public void startmain() {
/**所有权限申请完毕执行之后的代码*/
}
}