Android6.0 动态权限封装(代码非原创)
来源:互联网 发布:python清屏 编辑:程序博客网 时间:2024/05/17 06:59
类名:BaseActivity
直接调用函数,传入参数即可
import android.content.DialogInterface;import android.content.pm.PackageManager;import android.os.Build;import android.support.annotation.NonNull;import android.support.v4.app.ActivityCompat;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.widget.Toast;/** * @author Admin * @version $Rev$ * @des ${TODO} * @updateAuthor $Author$ * @updateDes ${TODO} */public class BaseActivity extends AppCompatActivity { //**************** Android M Permission (Android 6.0权限控制代码封装) private int permissionRequestCode = 88; private PermissionCallback permissionRunnable;public interface PermissionCallback { void hasPermission(); void noPermission();}/** * Android M运行时权限请求封装 * * @param permissionDes 权限描述 * @param runnable 请求权限回调 * @param permissions 请求的权限(数组类型),直接从Manifest中读取相应的值,比如Manifest.permission.WRITE_CONTACTS */public void performCodeWithPermission(@NonNull String permissionDes, PermissionCallback runnable, @NonNull String... permissions) { if (permissions == null || permissions.length == 0) return; // this.permissionrequestCode = requestCode; this.permissionRunnable = runnable; if ((Build.VERSION.SDK_INT < Build.VERSION_CODES.M) || checkPermissionGranted(permissions)) { if (permissionRunnable != null) { permissionRunnable.hasPermission(); permissionRunnable = null; } } else { //permission has not been granted. requestPermission(permissionDes, permissionRequestCode, permissions); }}private boolean checkPermissionGranted(String[] permissions) { boolean flag = true; for (String p : permissions) { if (ActivityCompat.checkSelfPermission(this, p) != PackageManager.PERMISSION_GRANTED) { flag = false; break; } } return flag;}private void requestPermission(String permissionDes, final int requestCode, final String[] permissions) { if (shouldShowRequestPermissionRationale(permissions)) { /*1. 第一次请求权限时,用户拒绝了,下一次:shouldShowRequestPermissionRationale() 返回 true,应该显示一些为什么需要这个权限的说明 2.第二次请求权限时,用户拒绝了,并选择了“不在提醒”的选项时:shouldShowRequestPermissionRationale() 返回 false 3. 设备的策略禁止当前应用获取这个权限的授权:shouldShowRequestPermissionRationale() 返回 false*/ // Provide an additional rationale to the user if the permission was not granted // and the user would benefit from additional context for the use of the permission. // For example, if the request has been denied previously. // Snackbar.make(getWindow().getDecorView(), requestName, // Snackbar.LENGTH_INDEFINITE) // .setAction(R.string.common_ok, new View.OnClickListener() { // @Override // public void onClick(View view) { // ActivityCompat.requestPermissions(BaseAppCompatActivity.this, // permissions, // requestCode); // } // }) // .show(); //如果用户之前拒绝过此权限,再提示一次准备授权相关权限 new AlertDialog.Builder(this) .setTitle("提示") .setMessage(permissionDes) .setPositiveButton("授权", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ActivityCompat.requestPermissions(BaseActivity.this, permissions, requestCode); } }).show(); } else { // Contact permissions have not been granted yet. Request them directly. ActivityCompat.requestPermissions(BaseActivity.this, permissions, requestCode); }}private boolean shouldShowRequestPermissionRationale(String[] permissions) { boolean flag = false; for (String p : permissions) { if (ActivityCompat.shouldShowRequestPermissionRationale(this, p)) { flag = true; break; } } return flag;}/** * Callback received when a permissions request has been completed. */@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == permissionRequestCode) { if (verifyPermissions(grantResults)) { if (permissionRunnable != null) { permissionRunnable.hasPermission(); permissionRunnable = null; } } else { Toast.makeText(this, "暂无权限执行相关操作!", Toast.LENGTH_SHORT).show(); if (permissionRunnable != null) { permissionRunnable.noPermission(); permissionRunnable = null; } } } else { super.onRequestPermissionsResult(requestCode, permissions, grantResults); }}public 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;}//********************** END Android M Permission ****************************************
}
阅读全文
0 0
- Android6.0 动态权限封装(代码非原创)
- Android6.0动态权限的封装
- Android6.0的动态权限封装
- Android6.0权限封装
- Android6.0权限封装
- Android高效开发之,Android6.0动态权限的封装
- Android6.0动态运行时权限封装使用
- Android6.0动态权限设置 第三方开源库permissiongen使用封装
- Android6.0动态权限
- Android6.0动态权限
- Android6.0动态权限
- Android6.0动态权限
- android6.0动态权限
- Android6.0 动态权限
- android6.0动态权限
- Android6.0动态权限
- Android6.0动态权限
- Android6.0动态权限
- java.net.UnknownHostException: master
- ADODB操作数据库函数Execute
- ASCII码及扩展码参考
- 读取webConfig的配置节点。
- ADODB操作数据库函数SelectLimit
- Android6.0 动态权限封装(代码非原创)
- ADODB操作数据库函数GetInsertSQL
- Give root password for maintenance(or type control -D to continue)
- matlab中的sub函数
- ADODB操作数据库函数DBData和qstr
- hdu 2444 The Accomodation of Students
- protobuf中的枚举缺省值应该为ENUN_TYPE_UNSPECIFIED
- 找到工作了
- ADODB操作数据库函数GetUpdateSQL