Android 6.0 申请权限

    xiaoxiao2024-04-19  10

    如今6.0的手机越来越多,做app 就要适配6.0,6.0的需要自己去申请权限。具体可以在加载引导页面,就去申请。

    首先,sdk必须是6.0以上的。

    // 申请权限的String[]

    private String[] permissionArray = new String[] {Manifest.permission.CALL_PHONE, Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_SMS};

    申请权限方法

    /** * Description:判断是否开启定位权限 * * @author kaiyinxu * @time 5/24/2016 9:47 AM Comment:6.0后判断权限不同 */ public void isPermissionLocal() { // For Android < Android M, self permissions are always granted. try { final PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), 0); int targetSdkVersion = info.applicationInfo.targetSdkVersion; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (targetSdkVersion >= Build.VERSION_CODES.M) { int permissionCheck = ContextCompat.checkSelfPermission(LoadingActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION); // 权限未允许 if (permissionCheck != 0) { PermissionUtils.checkPermissionArray(LoadingActivity.this, permissionArray, 2); } else { // 申请权限后的操作 getData(); } } else { // targetSdkVersion < Android M, we have to use PermissionChecker // 申请权限后的操作 getData(); } } else { // 申请权限后的操作 getData(); } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } }

    权限成功或失败的回调

    /** * Description:权限回调 * * @author kaiyinxu * @time 5/26/2016 10:36 AM Comment: */ @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case PermissionUtils.PERMISSION_REQUEST_CODE: if (PermissionUtils.verifyPermissions(grantResults)) { // Permission Granted // do you action } else { // Permission Denied // Toast.makeText(this, "WRITE_CONTACTS Denied", Toast.LENGTH_SHORT).show(); } // 申请权限后的操作 getData(); break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } }

    当然还有申请权限的utils

    package com.kaiyinxu.permisson.utils; import android.annotation.TargetApi; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.provider.Settings; import android.support.v4.app.ActivityCompat; import android.support.v4.app.Fragment; import android.util.Log; import java.util.ArrayList; /** * Created by kaiyinxu on 16-25-5. */ public class PermissionUtils { private static final String TAG = "PermissionUtils"; public static final int PERMISSION_REQUEST_CODE = 2; public static final int PERMISSION_SETTING_REQ_CODE = 0x1000; @TargetApi(Build.VERSION_CODES.M) public static boolean checkPermission(Object cxt, String permission, int requestCode) { if (!checkSelfPermissionWrapper(cxt, permission)) { if (!shouldShowRequestPermissionRationaleWrapper(cxt, permission)) { requestPermissionsWrapper(cxt, new String[]{permission}, requestCode); } else { Log.d(TAG, "should show rational"); } return false; } return true; } private static void requestPermissionsWrapper(Object cxt, String[] permission, int requestCode) { if (cxt instanceof Activity) { Activity activity = (Activity) cxt; ActivityCompat.requestPermissions(activity, permission, requestCode); } else if (cxt instanceof Fragment) { Fragment fragment = (Fragment) cxt; fragment.requestPermissions(permission, requestCode); } else { throw new RuntimeException("cxt is net a activity or fragment"); } } private static boolean shouldShowRequestPermissionRationaleWrapper(Object cxt, String permission) { if (cxt instanceof Activity) { Activity activity = (Activity) cxt; return ActivityCompat.shouldShowRequestPermissionRationale(activity, permission); } else if (cxt instanceof Fragment) { Fragment fragment = (Fragment) cxt; return fragment.shouldShowRequestPermissionRationale(permission); } else { throw new RuntimeException("cxt is net a activity or fragment"); } } @TargetApi(Build.VERSION_CODES.M) private static boolean checkSelfPermissionWrapper(Object cxt, String permission) { if (cxt instanceof Activity) { Activity activity = (Activity) cxt; return ActivityCompat.checkSelfPermission(activity, permission) == PackageManager.PERMISSION_GRANTED; } else if (cxt instanceof Fragment) { Fragment fragment = (Fragment) cxt; return fragment.getActivity().checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED; } else { throw new RuntimeException("cxt is net a activity or fragment"); } } private static String[] checkSelfPermissionArray(Object cxt, String[] permission) { ArrayList<String> permiList = new ArrayList<String>(); for (String p : permission) { if (!checkSelfPermissionWrapper(cxt, p)) { permiList.add(p); } } return permiList.toArray(new String[permiList.size()]); } @TargetApi(Build.VERSION_CODES.M) public static boolean checkPermissionArray(Object cxt, String[] permission, int requestCode) { String[] permissionNo = checkSelfPermissionArray(cxt, permission); if (permissionNo.length > 0) { requestPermissionsWrapper(cxt, permissionNo, requestCode); return false; } else return true; } public static boolean verifyPermissions(int[] grantResults) { // At least one result must be checked. if (grantResults.length < 1) { return false; } // Verify that each required permission has been granted, otherwise return false. for (int result : grantResults) { if (result != PackageManager.PERMISSION_GRANTED) { return false; } } return true; } /** * 检测系统弹出权限 * * @param cxt * @param req * @return */ @TargetApi(Build.VERSION_CODES.M) public static boolean checkSettingAlertPermission(Object cxt, int req) { if (cxt instanceof Activity) { Activity activity = (Activity) cxt; if (!Settings.canDrawOverlays(activity.getBaseContext())) { Log.i(TAG, "Setting not permission"); Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + activity.getPackageName())); activity.startActivityForResult(intent, req); return false; } } else if (cxt instanceof Fragment) { Fragment fragment = (Fragment) cxt; if (!Settings.canDrawOverlays(fragment.getActivity())) { Log.i(TAG, "Setting not permission"); Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + fragment.getActivity().getPackageName())); fragment.startActivityForResult(intent, req); return false; } } else { throw new RuntimeException("cxt is net a activity or fragment"); } return true; } }

    Android Studio 只要这些就行;Eclipse环境上,需要先把sdk变成6.0,就可以用了。

    转载请注明原文地址: https://ju.6miu.com/read-1288140.html
    最新回复(0)