Android 6.0 运行时权限处理
来源:互联网 发布:jquery.poshytip.js 编辑:程序博客网 时间:2024/05/21 04:24
工具类直接上:
import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.content.pm.PackageManager;import android.net.Uri;import android.provider.Settings;import android.support.annotation.NonNull;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;/** * 权限获取工具类 */public class PermissionsRequest { private static final int PERMISSION_REQUEST_CODE = 0; Activity activity; private boolean isRequireCheck = true; // 是否需要系统权限检测, 防止和系统提示框重叠 public PermissionsRequest(Activity activity) { this.activity = activity; } // 判断是否缺少权限 private boolean lacksPermissions(String... permissions) { for (String permission : permissions) { if (ContextCompat.checkSelfPermission(activity.getApplicationContext(), permission) == PackageManager.PERMISSION_DENIED) { return true; } } return false; } public void requestPermissions(String... permissions) { if (isRequireCheck) { if (lacksPermissions(permissions)) { // 请求权限兼容低版本 ActivityCompat.requestPermissions(activity, permissions, PERMISSION_REQUEST_CODE); } else { if (activity instanceof PermissionCallbacks) {// 全部权限都已获取 ((PermissionCallbacks) activity).onPermissionsGranted(); } } } else { isRequireCheck = true; } } /** * 用户权限处理, * 如果全部获取, 则直接过. * 如果权限缺失, 则提示Dialog. * * @param requestCode 请求码 * @param permissions 权限 * @param grantResults 结果 */ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == PERMISSION_REQUEST_CODE && hasAllPermissionsGranted(grantResults)) { isRequireCheck = true; if (activity instanceof PermissionCallbacks) { ((PermissionCallbacks) activity).onPermissionsGranted(); } } else { isRequireCheck = false; showMissingPermissionDialog(); } } // 含有全部的权限 private boolean hasAllPermissionsGranted(@NonNull int[] grantResults) { for (int grantResult : grantResults) { if (grantResult == PackageManager.PERMISSION_DENIED) { return false; } } return true; } // 显示缺失权限提示 private void showMissingPermissionDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle(R.string.help); builder.setMessage(R.string.string_help_text); // 拒绝, 退出应用 builder.setNegativeButton(R.string.quit, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (activity instanceof PermissionCallbacks) { ((PermissionCallbacks) activity).onPermissionsDenied(); } } }); builder.setPositiveButton(R.string.settings, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 启动应用的设置 Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + activity.getPackageName())); activity.startActivity(intent); } }); builder.setCancelable(false); builder.show(); } public interface PermissionCallbacks { void onPermissionsGranted(); void onPermissionsDenied(); }}
使用:
import android.Manifest;import android.os.Bundle;import android.support.annotation.NonNull;import android.support.v7.app.AppCompatActivity;import com.dsy.baseapplication.PermissionsRequest;import com.dsy.baseapplication.R;public class SplashActivity extends AppCompatActivity implements PermissionsRequest.PermissionCallbacks { // 所需的全部权限 static final String[] PERMISSIONS = new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE, }; PermissionsRequest permissionsRequest; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); permissionsRequest = new PermissionsRequest(this); } @Override protected void onResume() { super.onResume(); permissionsRequest.requestPermissions(PERMISSIONS); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); permissionsRequest.onRequestPermissionsResult(requestCode, permissions, grantResults); } @Override public void onPermissionsGranted() { //有权限 } @Override public void onPermissionsDenied() { //无权限 }}
android.permission-group.CALENDAR
android.permission.READ_CALENDAR
android.permission.WRITE_CALENDAR
android.permission-group.CAMERA
android.permission.CAMERA
android.permission-group.CONTACTS
android.permission.READ_CONTACTS
android.permission.WRITE_CONTACTS
android.permission.GET_ACCOUNTS
android.permission-group.LOCATION
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
android.permission-group.MICROPHONE
android.permission.RECORD_AUDIO
android.permission-group.PHONE
android.permission.READ_PHONE_STATE
android.permission.CALL_PHONE
android.permission.READ_CALL_LOG
android.permission.WRITE_CALL_LOG
com.android.voicemail.permission.ADD_VOICEMAIL
android.permission.USE_SIP
android.permission.PROCESS_OUTGOING_CALLS
android.permission-group.SENSORS
android.permission.BODY_SENSORS
android.permission-group.SMS
android.permission.SEND_SMS
android.permission.RECEIVE_SMS
android.permission.READ_SMS
android.permission.RECEIVE_WAP_PUSH
android.permission.RECEIVE_MMS
android.permission.READ_CELL_BROADCASTS
android.permission-group.STORAGE
android.permission.READ_EXTERNAL_STORAGE
android.permission.WRITE_EXTERNAL_STORAGE
0 0
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 Marshmallow运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- JavaScript函数浅析
- vs2008安装和编译curl库
- NSString 字符串处理:截取字符串、匹配字符串、分隔字符串
- poj 2240 Arbitrage
- android开发 友盟推送点击Notification使用WebView加载url同时会调用系统浏览器的问题
- Android 6.0 运行时权限处理
- 处理ViewPager嵌套ViewPager的滑动事件冲突
- openjudge 百练 熄灯问题
- hdu 1010
- Zephyr OS 系列博客索引目录
- 三篇线段树扫描线总结
- 网站收藏
- 3330顺序表应用6:有序顺序表查询
- Maven学习(四)Maven 命令行选项