zoukankan      html  css  js  c++  java
  • android 6.0适配(总结)

    6.0的适配主要是权限:

    权限的分组:

    普通权限:也就是正常权限,是对手机的一些正常操作,对用户的隐私没有太大影响的权限,比如手机的震动,网络访问,蓝牙等权限,这些权限会在应用被安装的时候默认授予,用户不能拒绝,也不能取消

    危险权限:其实就是运行中需要处理的权限,也是我们最需要注意的权限,这些权限会关系到用户的隐私或影响到其他应用的运行

    权限的申请:

    @RequiresApi(api = Build.VERSION_CODES.M)
    private void checkPermission() {
    String[] permissions = new String[]{
    Manifest.permission.ACCESS_FINE_LOCATION,
    Manifest.permission.RECORD_AUDIO,
    Manifest.permission.READ_PHONE_STATE,
    Manifest.permission.CAMERA,
    Manifest.permission.READ_EXTERNAL_STORAGE,
    Manifest.permission.WRITE_EXTERNAL_STORAGE};

    ActivityCompat.requestPermissions(this, permissions, 1000);
    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    for (String permission : permissions) {
    if (PermissionUtils.isGranted(permission)) {
    Log.i("permission", "同意的权限:" + permission);
    } else {
    //已拒绝
    finish();
    Log.i("permission", "已拒绝的权限:" + permission);
    if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
    //禁止后不再询问
    Log.i("permission", "禁止后不再询问的权限:" + permission);
    }
    }
    }
    }

    /**
    * Return whether <em>you</em> have granted the permissions.
    *
    * @param permissions The permissions.
    * @return {@code true}: yes<br>{@code false}: no
    */
    public static boolean isGranted(final String... permissions) {
    for (String permission : permissions) {
    if (!isGranted(permission)) {
    return false;
    }
    }
    return true;
    }

    private static boolean isGranted(final String permission) {
    return Build.VERSION.SDK_INT < Build.VERSION_CODES.M
    || PackageManager.PERMISSION_GRANTED
    == ContextCompat.checkSelfPermission(Utils.getApp(), permission);
    }

     Android 6.0中,还有两个特殊权限的处理:

    • 设置悬浮窗: SYSTEM_ALERT_WINDOW

    • 修改系统设置:WRITE_SETTINGS

     修改系统设置权限的授权 WRITE_SETTINGS,与其他权限不同,而是使用startActivityForResult,启动系统设置的授权界面来申请
    private void requestWriteSettings() {
    try {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
    //修改系统设置,正常处理逻辑
    } else {
    if (!Settings.System.canWrite(this)) {
    Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
    intent.setData(Uri.parse("package:" + getPackageName()));
    startActivityForResult(intent, REQUEST_CODE_WRITE_SETTINGS);
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_WRITE_SETTINGS) {
    if (Settings.System.canWrite(this)) {
    Log.i("permission", "onActivityResult write settings granted");
    //修改系统设置,正常处理逻辑
    }
    }
    }
    更多参考:
    https://blog.csdn.net/yangdahuan/article/details/60966887
    https://www.jianshu.com/p/feb6dd8d2212
    https://www.jianshu.com/p/82997b7033da
    https://www.jianshu.com/p/c3908cb3554d (特殊权限处理)
  • 相关阅读:
    Django 初探--Django的开发服务器及创建数据库(笔记)
    Django初探--开发环境搭建(笔记)
    python文件处理--笔记
    python-property、docstring--笔记
    python之Lambda函数---笔记
    参数拆分-- 笔记
    python—带形状的词云图
    python—压缩文件
    python—dataframe用法
    python—mysql数据库读取表1获取name作为参数,传入访问表2获取age,结果存入excel
  • 原文地址:https://www.cnblogs.com/candyzhmm/p/11242533.html
Copyright © 2011-2022 走看看