android开发权限询问的示例代码

android开发权限询问的示例代码,第1张

概述现在基于信息安全问题,特别是版本是23以上权限越严格。特别是拍照,读,写权限

现在基于信息安全问题,特别是版本是23以上权限越严格。

特别是拍照,读,写权限

一般权限允许过,下次就不用询问了的,所以很多应用都喜欢在首页或者启动页直接询问,不允许的就用不了1、下面给出封装好的类,至于什么时候调看项目需要

public class EasyPermissions {private static final String TAG = "EasyPermissions";public interface PermissionCallbacks extends    ActivityCompat.OnRequestPermissionsResultCallback {  voID onPermissionsGranted(List<String> perms);  voID onPermissionsDenIEd(List<String> perms);}/** * Check if the calling context has a set of permissions. * * @param context the calling context. * @param perms  one ore more permissions,such as {@code androID.Manifest.permission.CAMERA}. * @return true if all permissions are already granted,false if at least one permission * is not yet granted. */public static boolean hasPermissions(Context context,String... perms) {  for (String perm : perms) {    boolean hasPerm = (ContextCompat.checkSelfPermission(context,perm) == PackageManager.PERMISSION_GRANTED);    if (!hasPerm) {      return false;    }  }  return true;}/** * Request a set of permissions,showing rationale if the system requests it. * * @param object   Activity or Fragment requesting permissions. Should implement *          {@link ActivityCompat.OnRequestPermissionsResultCallback} *          or *          {@link androID.support.v13.app.FragmentCompat.OnRequestPermissionsResultCallback} * @param rationale  a message explaining why the application needs this set of permissions,will *          be displayed if the user rejects the request the first time. * @param requestCode request code to track this request,must be < 256. * @param perms    a set of permissions to be requested. */public static voID requestPermissions(final Object object,String rationale,final int requestCode,final String... perms) {  requestPermissions(object,rationale,androID.R.string.ok,androID.R.string.cancel,requestCode,perms);}/** * Request a set of permissions,showing rationale if the system requests it. * * @param object     Activity or Fragment requesting permissions. Should implement *            {@link ActivityCompat.OnRequestPermissionsResultCallback} *            or *            {@link androID.support.v13.app.FragmentCompat.OnRequestPermissionsResultCallback} * @param rationale   a message explaining why the application needs this set of permissions,will *            be displayed if the user rejects the request the first time. * @param positivebutton custom text for positive button * @param negativebutton custom text for negative button * @param requestCode  request code to track this request,must be < 256. * @param perms     a set of permissions to be requested. */public static voID requestPermissions(final Object object,@StringRes int positivebutton,@StringRes int negativebutton,final String... perms) {  checkCallingObjectSuitability(object);  boolean shouldShowRationale = false;  for (String perm : perms) {    shouldShowRationale = shouldShowRationale || shouldShowRequestPermissionRationale(object,perm);  }  if (shouldShowRationale) {    //d框询问    AlertDialog dialog = new AlertDialog.Builder(getActivity(object))        .setMessage(rationale)        .setPositivebutton(positivebutton,new DialogInterface.OnClickListener() {          @OverrIDe          public voID onClick(DialogInterface dialog,int which) {            executePermissionsRequest(object,perms,requestCode);          }        })        .setNegativebutton(negativebutton,int which) {            // Do nothing,user does not want to request            PermissionCallbacks callbacks = (PermissionCallbacks) object;            if(callbacks != null) {              callbacks.onPermissionsDenIEd(new ArrayList<String>());            }          }        }).create();    dialog.show();  } else {    executePermissionsRequest(object,requestCode);  }}/** * Handle the result of a permission request,should be called from the calling Activity's * {@link ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,String[],int[])} * method. * <p/> * If any permissions were granted or denIEd,the Activity will receive the appropriate * callbacks through {@link PermissionCallbacks} and methods annotated with * {@link AfterPermissionGranted} will be run if appropriate. * * @param requestCode requestCode argument to permission result callback. * @param permissions permissions argument to permission result callback. * @param grantResults grantResults argument to permission result callback. * @param object    the calling Activity or Fragment. * @throws IllegalArgumentException if the calling Activity does not implement *                 {@link PermissionCallbacks}. */public static voID onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults,Object object) {  checkCallingObjectSuitability(object);  PermissionCallbacks callbacks = (PermissionCallbacks) object;  // Make a collection of granted and denIEd permissions from the request.  ArrayList<String> granted = new ArrayList<>();  ArrayList<String> denIEd = new ArrayList<>();  for (int i = 0; i < permissions.length; i++) {    String perm = permissions[i];    if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {      granted.add(perm);    } else {      denIEd.add(perm);    }  }  // Report granted permissions,if any.  if (!granted.isEmpty()) {    // Notify callbacks    callbacks.onPermissionsGranted(granted);  }  // Report denIEd permissions,if any.  if (!denIEd.isEmpty()) {    callbacks.onPermissionsDenIEd(denIEd);  }  // If 100% successful,call annotated methods  if (!granted.isEmpty() && denIEd.isEmpty()) {    runAnnotatedMethods(object,requestCode);  }}private static boolean shouldShowRequestPermissionRationale(Object object,String perm) {  if (object instanceof Activity) {    return ActivityCompat.shouldShowRequestPermissionRationale((Activity) object,perm);  } else if (object instanceof Fragment) {    return ((Fragment) object).shouldShowRequestPermissionRationale(perm);  } else {    return false;  }}private static voID executePermissionsRequest(Object object,String[] perms,int requestCode) {  checkCallingObjectSuitability(object);  if (object instanceof Activity) {    ActivityCompat.requestPermissions((Activity) object,requestCode);  } else if (object instanceof Fragment) {    ((Fragment) object).requestPermissions(perms,requestCode);  }}private static Activity getActivity(Object object) {  if (object instanceof Activity) {    return ((Activity) object);  } else if (object instanceof Fragment) {    return ((Fragment) object).getActivity();  } else {    return null;  }}private static voID runAnnotatedMethods(Object object,int requestCode) {  Class clazz = object.getClass();  for (Method method : clazz.getDeclaredMethods()) {    if (method.isAnnotationPresent(AfterPermissionGranted.class)) {      // Check for annotated methods with matching request code.      AfterPermissionGranted ann = method.getAnnotation(AfterPermissionGranted.class);      if (ann.value() == requestCode) {        // Method must be voID so that we can invoke it        if (method.getParameterTypes().length > 0) {          throw new RuntimeException("Cannot execute non-voID method " + method.getname());        }        try {          // Make method accessible if private          if (!method.isAccessible()) {            method.setAccessible(true);          }          method.invoke(object);        } catch (illegalaccessexception e) {          ILogger.e(TAG,"runDefaultMethod:illegalaccessexception",e);        } catch (InvocationTargetException e) {          ILogger.e(TAG,"runDefaultMethod:InvocationTargetException",e);        }      }    }  }}private static voID checkCallingObjectSuitability(Object object) {  // Make sure Object is an Activity or Fragment  if (!((object instanceof Fragment) || (object instanceof Activity))) {    throw new IllegalArgumentException("Caller must be an Activity or a Fragment.");  }  // Make sure Object implements callbacks  if (!(object instanceof PermissionCallbacks)) {    throw new IllegalArgumentException("Caller must implement PermissionCallbacks.");  }}}

注:这个类不是我写的,分享给大家

2、调用示例(activity或fragment):(方法调用的时机随你)

private voID requestgalleryPermission() {  //权限参数可以添加很多,不固定参数的  if (EasyPermissions.hasPermissions(this,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) {    getPhotos();//如果具有权限做的 *** 作  } else {    // Ask for one permission    EasyPermissions.requestPermissions(this,getString(R.string.permissions_tips_gallery),galleryFinal.PERMISSIONS_CODE_galLERY,Manifest.permission.WRITE_EXTERNAL_STORAGE);  }}

3、拒绝和允许做的 *** 作(activity或fragment):

@OverrIDepublic voID onPermissionsGranted(List<String> List) {  //允许  getPhotos();}@OverrIDepublic voID onPermissionsDenIEd(List<String> List) {  //拒绝  mTvEmptyVIEw.setText(R.string.permissions_denIEd_tips);  //mIvTakePhoto.setVisibility(VIEw.GONE);}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

您可能感兴趣的文章:Android 在程序运行时申请权限的实例讲解Android 中的危险权限详细整理详解Android运行时权限及APP适配方法 总结

以上是内存溢出为你收集整理的android开发权限询问的示例代码全部内容,希望文章能够帮你解决android开发权限询问的示例代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1142938.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存