版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w690333243/article/details/89203663
代码类(Activity)中添加如下部分
public static String[] permissions = new String[]{Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
/**
* 检测权限
*
* @param activity
* @param permissionName
* @return
*/
private static String[] checkRequestedPermission(Activity activity, String[] permissionName) {
boolean isPermissionGranted;
List<String> needRequestPermission = new ArrayList<String>();
for (String tmp : permissionName) {
isPermissionGranted = (PackageManager.PERMISSION_GRANTED ==
ActivityCompat.checkSelfPermission(activity, tmp));
if (!isPermissionGranted) {
needRequestPermission.add(tmp);
}
}
String[] needRequestPermissionArray = new String[needRequestPermission.size()];
needRequestPermission.toArray(needRequestPermissionArray);
return needRequestPermissionArray;
}
private static final String[] REQUIRED_PERMISSIONS = {
//读写SD卡
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
//获取手机状态
//Manifest.permission.READ_PHONE_STATE,
//Manifest.permission.RECEIVE_SMS,
//Manifest.permission.READ_CONTACTS,
//Manifest.permission.READ_SMS,
//获取位置信息
//Manifest.permission.ACCESS_COARSE_LOCATION,
//Manifest.permission.ACCESS_FINE_LOCATION
//Manifest.permission.REQUEST_INSTALL_PACKAGES
};//Manifest.permission.CALL_PHONE
private static final int REQUEST_CODE_INSTALL_PERMISSION = 107;
private static final int REQUEST_CODE = 100;
//private String[] mRequestedPermissons;
private static final String PACKAGE_URL_SCHEME = "package:";
boolean isAllPermissionsGranted = true;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//super.onActivityResult(requestCode, resultCode, data);
//LogUtils.i(TAG, "onActivityResult: resultCode:" + resultCode);
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_INSTALL_PERMISSION) {
checkInstallPermission();//再次执行安装流程,包含权限判等
} else {
finish();
}
}
@RequiresApi(api = Build.VERSION_CODES.O)
private void startInstallPermissionSettingActivity() {
//LogUtils.i(TAG, "startInstallPermissionSettingActivity: ");
Uri packageURI = Uri.parse(PACKAGE_URL_SCHEME + getPackageName());
//注意这个是8.0新API
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
//Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE, packageURI);
//intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(intent, REQUEST_CODE_INSTALL_PERMISSION);
getPackageManager().canRequestPackageInstalls();
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults) {
if (requestCode != REQUEST_CODE || permissions == null || grantResults == null ||
permissions.length == 0 || grantResults.length == 0) {
isAllPermissionsGranted = false;
} else {
for (int i : grantResults) {
if (i != PackageManager.PERMISSION_GRANTED)
isAllPermissionsGranted = false;
}
}
if (isAllPermissionsGranted) {
Log.i(TAG, "onRequestPermissionsResult isAllPermissionsGranted");
checkInstallPermission();
} else {
showMissingPermissionDialog();
}
}
private void showMissingPermissionDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("帮助");
builder.setMessage("没有必需权限无法使用此应用。请在“设置”中授予权限。");
builder.setNegativeButton("退出",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
builder.setPositiveButton("设置",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse(PACKAGE_URL_SCHEME + getPackageName()));
startActivity(intent);
finish();
}
});
builder.setCancelable(false);
builder.show();
}
//安装应用的流程
private void checkInstallPermission() {
boolean haveInstallPermission;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//8.0
//先获取是否有安装未知来源应用的权限
haveInstallPermission = getPackageManager().canRequestPackageInstalls();
if (!haveInstallPermission) {//没有权限
//没有未知来源安装权限权限
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示");
builder.setMessage("需要打开安装未知来源权限,请去设置中开启应用权限,以允许安装来自此来源的应用");
builder.setPositiveButton("去设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startInstallPermissionSettingActivity();
}
}
});
builder.show();
return;//防止系统执行默认的方法会跳转页面后弹窗提示,所以会重复 return 掉
}
}
//有权限,开始安装应用程序
//installApk(apk);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//23
String[] neededPermissions =
checkRequestedPermission(this, REQUIRED_PERMISSIONS);
if (neededPermissions != null && neededPermissions.length != 0) {
requestPermissions(neededPermissions, REQUEST_CODE);
} else {
checkInstallPermission();
}
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_voice_encryption);
mPlayButton = (Button) findViewById(R.id.playButton);
mPlayButton.setOnClickListener(this);
mEncryptionButton = (Button) findViewById(R.id.encryptionButton);
mEncryptionButton.setOnClickListener(this);
mDecryptionButton = (Button) findViewById(R.id.decryptionButton);
mDecryptionButton.setOnClickListener(this);
}