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() {        //无权限    }}


需要授权的权限组列表:        同一组的任何一个权限被授权了,其他权限也自动被授权。

Permission GroupPermissionsandroid.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
原创粉丝点击