700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android-动态权限申请代码

Android-动态权限申请代码

时间:2023-05-18 10:33:37

相关推荐

Android-动态权限申请代码

Android 6.0版本之后,需要配置动态权限,动态权限代码有点多,纯粹记住是比较难的,所以这里提供一下模板代码,直接copy即可,然后修改或增加需要的权限即可。

基类文件RequestPermissionsActivityBase:

package com.android.face.permission;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.pm.PackageManager;import android.os.Bundle;import android.os.Trace;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import java.util.ArrayList;import java.util.Arrays;/*** Activity that asks the user for all {@link #getDesiredPermissions} if any of* {@link #getRequiredPermissions} are missing.** NOTE: As a result of b/22095159, this can behave oddly in the case where the final permission* you are requesting causes an application restart.*/public abstract class RequestPermissionsActivityBase extends Activityimplements ActivityCompat.OnRequestPermissionsResultCallback {public static final String PREVIOUS_ACTIVITY_INTENT = "previous_intent";/** Whether the permissions activity was already started. */protected static final String STARTED_PERMISSIONS_ACTIVITY = "started_permissions_activity";private static final int PERMISSIONS_REQUEST_ALL_PERMISSIONS = 1;/*** @return list of permissions that are needed in order for {@link #PREVIOUS_ACTIVITY_INTENT} to* operate. You only need to return a single permission per permission group you care about.*/protected abstract String[] getRequiredPermissions();/*** @return list of permissions that would be useful for {@link #PREVIOUS_ACTIVITY_INTENT} to* operate. You only need to return a single permission per permission group you care about.*/protected abstract String[] getDesiredPermissions();protected Intent mPreviousActivityIntent;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mPreviousActivityIntent = (Intent) getIntent().getExtras().get(PREVIOUS_ACTIVITY_INTENT);// Only start a requestPermissions() flow when first starting this activity the first time.// The process is likely to be restarted during the permission flow (necessary to enable// permissions) so this is important to track.if (savedInstanceState == null) {requestPermissions();}}/*** If any permissions the Contacts app needs are missing, open an Activity* to prompt the user for these permissions. Moreover, finish the current activity.** This is designed to be called inside {@link Activity#onCreate}*/protected static boolean startPermissionActivity(Activity activity,String[] requiredPermissions, Class<?> newActivityClass) {if (!hasPermissions(activity, requiredPermissions)) {final Intent intent = new Intent(activity, newActivityClass);activity.getIntent().putExtra(STARTED_PERMISSIONS_ACTIVITY, true);intent.putExtra(PREVIOUS_ACTIVITY_INTENT, activity.getIntent());activity.startActivity(intent);activity.finish();return true;}return false;}protected boolean isAllGranted(String permissions[], int[] grantResult) {for (int i = 0; i < permissions.length; i++) {if (grantResult[i] != PackageManager.PERMISSION_GRANTED&& isPermissionRequired(permissions[i])) {return false;}}return true;}private boolean isPermissionRequired(String p) {return Arrays.asList(getRequiredPermissions()).contains(p);}private void requestPermissions() {Trace.beginSection("requestPermissions");try {// Construct a list of missing permissionsfinal ArrayList<String> unsatisfiedPermissions = new ArrayList<>();for (String permission : getDesiredPermissions()) {if (checkSelfPermission(permission)!= PackageManager.PERMISSION_GRANTED) {unsatisfiedPermissions.add(permission);}}if (unsatisfiedPermissions.size() == 0) {throw new RuntimeException("Request permission activity was called even"+ " though all permissions are satisfied.");}ActivityCompat.requestPermissions(this,unsatisfiedPermissions.toArray(new String[unsatisfiedPermissions.size()]),PERMISSIONS_REQUEST_ALL_PERMISSIONS);} finally {Trace.endSection();}}@Overridepublic int checkSelfPermission(String permission) {return ContextCompat.checkSelfPermission(this, permission);}protected static boolean hasPermissions(Context context, String[] permissions) {Trace.beginSection("hasPermission");try {for (String permission : permissions) {if (ContextCompat.checkSelfPermission(context, permission)!= PackageManager.PERMISSION_GRANTED) {return false;}}return true;} finally {Trace.endSection();}}}

子类文件RequestPermissionsActivity:

package com.android.face.permission;import android.Manifest.permission;import android.app.Activity;import android.content.Context;import android.content.Intent;/*** Activity that requests permissions needed for activities exported from Contacts.*/public class RequestPermissionsActivity extends RequestPermissionsActivityBase {private static final String[] REQUIRED_PERMISSIONS = new String[]{permission.CALL_PHONE,permission.READ_PHONE_STATE,permission.READ_CONTACTS,permission.ACCESS_COARSE_LOCATION,permission.WRITE_EXTERNAL_STORAGE,permission.READ_EXTERNAL_STORAGE,permission.CAMERA,permission.RECORD_AUDIO};@Overrideprotected String[] getRequiredPermissions() {return REQUIRED_PERMISSIONS;}@Overrideprotected String[] getDesiredPermissions() {return REQUIRED_PERMISSIONS;}public static boolean startPermissionActivity(Activity activity) {return startPermissionActivity(activity, REQUIRED_PERMISSIONS,RequestPermissionsActivity.class);}@Overridepublic void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {if (permissions != null && permissions.length > 0&& isAllGranted(permissions, grantResults)) {mPreviousActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);startActivity(mPreviousActivityIntent);finish();overridePendingTransition(0, 0);} else {//Toast.makeText(this, R.string.missing_required_permission, Toast.LENGTH_SHORT).show();finish();}}/*** M: Add for check basic permissions state.*/public static boolean hasBasicPermissions(Context context) {return hasPermissions(context, REQUIRED_PERMISSIONS);}}

然后只要在Activity类中的方法onCreate开始部分调用:

if (RequestPermissionsActivity.startPermissionActivity(this)) {return;}

将上面两个类代码copy到文件,然后如上调用一把,再将需要的权限申请写到RequestPermissionsActivity类的数组REQUIRED_PERMISSIONS中,最后还需要将对应的权限申请配置在AndroidManifest.xml文件中。

按照上面步骤做一遍,运行应用就会弹出权限界面了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。