android6.0(M) 验证权限工具类+ContextCompat.checkSelfPermission(context, permission)

来源:互联网 发布:数据库开发工具有哪些 编辑:程序博客网 时间:2024/06/05 15:28

eclipse 问题:The method checkSelfPermission(Context, String) is undefined for the type ContextCompat解决。


必须是SDK6.0里的v4~13版本的jar包支持才可运行!


[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. package com.example.aleak.myapplication002.util;  
  2.   
  3. import android.content.Context;  
  4. import android.content.pm.PackageManager;  
  5. import android.content.pm.PermissionInfo;  
  6. import android.support.v4.content.ContextCompat;  
  7. import android.util.Log;  
  8.   
  9. import java.util.ArrayList;  
  10. import java.util.Arrays;  
  11. import java.util.List;  
  12.   
  13. /** 
  14.  * Created by aleak on 16-4-26. 
  15.  * a util for check permission 
  16.  */  
  17. public class CheckPermissionUtils {  
  18.   
  19.     private static final String TAG = CheckPermissionUtils.class.getSimpleName();  
  20.   
  21.     /** 
  22.      * check this permission is need to request 
  23.      * 
  24.      * @param context         context 
  25.      * @param permissionArray permissionArray 
  26.      * @return 
  27.      */  
  28.     public static String[] getNeededPermission(Context context, String[] permissionArray) {  
  29.         if (context == null || permissionArray == null || permissionArray.length == 0) {  
  30.             return new String[]{};  
  31.         }  
  32.   
  33.         List<String> permissionList = new ArrayList<>();  
  34.         for (int i = 0; i < permissionArray.length; i++) {  
  35.             if (CheckPermissionUtils.isNeedAddPermission(context, permissionArray[i])) {  
  36.                 permissionList.add(permissionArray[i]);  
  37.             }  
  38.         }  
  39.         return permissionList.toArray(new String[permissionList.size()]);  
  40.     }  
  41.   
  42.     /** 
  43.      * check permission is need ? 
  44.      * 
  45.      * @return true: need permission  false: don't need permission 
  46.      */  
  47.     public static boolean isNeedAddPermission(Context context, String permission) {  
  48.         return ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED;  
  49.     }  
  50.   
  51.     /** 
  52.      * check permission and show setting dialog for user 
  53.      * 
  54.      * @param getPermissionListener getPermissionListener 
  55.      * @param context               context 
  56.      * @param permissions           permissions 
  57.      * @param grantResults          grantResults 
  58.      */  
  59.     public static void checkPermissionResult(OnHasGetPermissionListener getPermissionListener, Context context  
  60.             , String[] permissions, int[] grantResults) {  
  61.         if (context == null || permissions == null || grantResults == null || getPermissionListener == null) {  
  62.             android.util.Log.d(TAG, "context=" + context + "\n"  
  63.                     + "permissions=" + Arrays.toString(permissions) + "\n"  
  64.                     + "grantResults=" + Arrays.toString(grantResults));  
  65.             return;  
  66.         }  
  67.   
  68.         Log.d(TAG, "permissions=" + Arrays.toString(permissions) + ",grantResults=" + Arrays.toString(grantResults));  
  69.         // save the request permission  
  70.         List<PermissionInfo> list = new ArrayList<>();//Your  permission list  
  71.   
  72.         if (grantResults.length <= 0) {  
  73.             return;  
  74.         }  
  75.   
  76.         // check permission request result  
  77.         for (int i = 0; i < permissions.length; i++) {  
  78.             if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {  
  79.                 PermissionInfo info = null;  
  80.                 try {  
  81.                     info = context.getPackageManager().getPermissionInfo(permissions[i], 0);  
  82.                 } catch (PackageManager.NameNotFoundException e) {  
  83.                     e.printStackTrace();  
  84.                 }  
  85.                 if (info != null) {  
  86.                     list.add(info);  
  87.                 }  
  88.             }  
  89.         }  
  90.   
  91.         // is we has all permission  
  92.         if (list.size() == 0) {  
  93.             Log.d(TAG, "checkPermissionResult onSuccess");  
  94.             getPermissionListener.onSuccess();  
  95.         } else {  
  96.             getPermissionListener.onFail();  
  97.             // show the dialog for user to setting  
  98.             Log.d(TAG, "checkPermissionResult onFail");  
  99.         }  
  100.     }  
  101.   
  102.     public interface OnHasGetPermissionListener {  
  103.         void onSuccess();  
  104.   
  105.         void onFail();  
  106.     }  
  107. }  

运行代码实例如下:(Fragment式 注意没用FramgCompat,为什么不用请自行研究,注意运行SDK必须 >=23)

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. public class FragmentRequest extends Fragment {  
  2.   
  3.     private static final String TAG = "FragmentRequest";  
  4.     private static final int REQUEST_CODE_TEST = 999;  
  5.   
  6.     public void requestPermissiontest() {  
  7.         // you needer permissions  
  8.         String[] permissions = {Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE};  
  9.         // check it is needed  
  10.         permissions = CheckPermissionUtils.getNeededPermission(getActivity(), permissions);  
  11.         // requestPermissions  
  12.         if (permissions.length > 0) {  
  13.             requestPermissions(permissions, REQUEST_CODE_TEST);  
  14.         }  
  15.     }  
  16.   
  17.     @Override  
  18.     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {  
  19.   
  20.         switch (requestCode) {  
  21.             case REQUEST_CODE_TEST:  
  22.                 if (grantResults.length > 0) {  
  23.                     return;  
  24.                 }  
  25.   
  26.                 if (!CheckPermissionUtils.isNeedAddPermission(getActivity(), Manifest.permission.READ_PHONE_STATE)) {  
  27.                     // do something  
  28.                     Toast.makeText(getActivity(), "申请权限成功:" + Manifest.permission.READ_PHONE_STATE, Toast.LENGTH_LONG).show();  
  29.                 }  
  30.                 if (!CheckPermissionUtils.isNeedAddPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)) {  
  31.                     // do something  
  32.                     Toast.makeText(getActivity(), "申请权限成功:" + Manifest.permission.WRITE_EXTERNAL_STORAGE, Toast.LENGTH_LONG).show();  
  33.                 }  
  34.   
  35.                 break;  
  36.   
  37.         }  
  38.   
  39.         super.onRequestPermissionsResult(requestCode, permissions, grantResults);  
  40.     }  
0 0
原创粉丝点击