Android6.0运行时权限的封装

    xiaoxiao2021-03-25  92

    转载请注明出处:http://blog.csdn.net/darling_R/article/details/61210636

    在Android6.0引入了运行时权限,也就是不用在安装应用的时候把所有权限都声明,在用户需要出发某种危险权限的时候,及时的提醒用户是否授权权限,简单的使用方法会增加代码量,那么就来做一下封装吧,以便后面使用起来相对简单。 1。由于请求运行时权限需要在activity里面,为了方便起见,可以封装到BaseActivity里

    package com.yh.permissiontest; import android.content.pm.PackageManager; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import java.util.ArrayList; import java.util.List; /** * Created by YH on 2017/3/10. */ public class BaseActivity extends AppCompatActivity { private final static int REQUESTCODE = 1; private PermissionListener mListener; public void requestRuntimePermission(String[] permissions, PermissionListener listener) { mListener = listener; List<String> permissionList = new ArrayList<>(); for (String permission : permissions) { if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { permissionList.add(permission); } } //判断存储权限的集合是否为空,为空的话,说明权限都允许了 if (!permissionList.isEmpty()) { ActivityCompat.requestPermissions(this, permissionList.toArray(new String[permissionList.size()]), REQUESTCODE); } else { mListener.onGranted(); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case REQUESTCODE: if (grantResults.length > 0) { List<String> deniedPernissions = new ArrayList<>(); for (int i = 0; i < grantResults.length; i++) { int grantResult = grantResults[i]; String permission = permissions[i]; if (grantResult != PackageManager.PERMISSION_GRANTED) { deniedPernissions.add(permission); } } if (deniedPernissions.isEmpty()) {//所有权限都被允许 mListener.onGranted(); } else {//有被拒绝的权限 mListener.onDenied(deniedPernissions); } } break; default: break; } } }

    然后写一个接口,将结果回调给调用的activity

    package com.yh.permissiontest; import java.util.List; /** * Created by YH on 2017/3/10. */ public interface PermissionListener { /** * 全部允许 */ void onGranted(); /** * 被拒绝时回调, * * @param deniedPermission 被拒绝的所有权限 */ void onDenied(List<String> deniedPermission); }

    然后在需要的时候调用即可 MainActivity:

    requestRuntimePermission(new String[]{Manifest.permission.CALL_PHONE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, new PermissionListener() { @Override public void onGranted() { Toast.makeText(MainActivity.this, "所有权限都允许了", Toast.LENGTH_SHORT).show(); } @Override public void onDenied(List<String> deniedPermissions) { for (String deniedPermission : deniedPermissions) { Toast.makeText(MainActivity.this, deniedPermission + "被拒绝", Toast.LENGTH_SHORT).show(); } } });

    到此,封装就结束了

    转载请注明原文地址: https://ju.6miu.com/read-25205.html

    最新回复(0)