zoukankan      html  css  js  c++  java
  • 6.0权限的简单实用

    6.0的权限有了新的机制,需要动态的去告诉用户我需要你的权限,

    还是清单文件中依旧要配置这个需要的权限,首先就是兼容低版本,其次声明本应用需要的所有权限

    他的思路是这样的,

    首先ContextCompat.checkSelfPermission检查权限,如果有权限,直接写你正常的代码逻辑。

    若是没有权限 ActivityCompat.requestPermissions申请权限,

    申请完成后回调onRequestPermissionsResult查看用户是否给了权限,有则继续直接写你正常的代码逻辑。

    没有则不进行,你可以说明一些原因等,看你的需求跟想法了,

    其中有个问题暂未理解吧ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.WRITE_EXTERNAL_STORAGE);//该方法作用不理解中。。。。

    这个暂时不知道它的作用,不写目前不影响,看其他的博客介绍说是在用户拒绝之后通知用户申请这个权限的原因,懵逼中,

    还有就是这只是简单的使用方式,我们可以封装起来,自己写个activity进行封装,生命回调方法等,逻辑留给子类实现,

    还有就是一个叫做

    PermissionGen慕课网推荐的,

    简单易用代码在https://github.com/lovedise/PermissionGen

    import android.Manifest;
    import android.content.pm.PackageManager;
    import android.os.Bundle;
    import android.support.v4.app.ActivityCompat;
    import android.support.v4.content.ContextCompat;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        private TextView textView;
        private Button button;
        private RelativeLayout activity_main;
        //申请的权限权限
        private static String[] PERMISSIONS =  new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
        //申请权限的请求码
        final int MY_PERMISSIONS_REQUEST_READ_CONTACTS = 99;
        private static final String TAG = "lizhanqi";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initView();
        }
        private void initView() {
            //找到控件设置点击事件
            button = (Button) findViewById(R.id.button);
            activity_main = (RelativeLayout) findViewById(R.id.activity_main);
            button.setOnClickListener(this);
        }
    
        /**
            权限申请完成后的回调
         */
        @Override
        public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
            //根据请求权限的码判断是那次的申请,
            switch (requestCode){
                case MY_PERMISSIONS_REQUEST_READ_CONTACTS:
                    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //获得到了权限
                    // 正常处理接下来的逻辑代码等
                        Toast.makeText(this, "已经有了权限", Toast.LENGTH_SHORT).show();
                    } else {
                    //用户拒绝未得到权限
                        Toast.makeText(this, "用户拒绝", Toast.LENGTH_SHORT).show();
                    }
                    break;
            }
        }
        @Override
        public void onClick(View v) {
           // ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.WRITE_EXTERNAL_STORAGE);//该方法作用不理解中。。。。
        //下面这里也可以直接在页面创建的时候申请
          if(ContextCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
    //未获得权限
                //申请WRITE_EXTERNAL_STORAGE权限
                                          //上下文, 权限, 申请权限的请求码
                ActivityCompat.requestPermissions(this, PERMISSIONS,MY_PERMISSIONS_REQUEST_READ_CONTACTS);
            }else {
                //获得到了权限
                // 正常处理接下来的逻辑代码等
                Toast.makeText(this, "已经有了权限", Toast.LENGTH_SHORT).show();
            }
        }
    }
  • 相关阅读:
    Axiom3D:资源引用与加载基本流程.
    实践:C++平台迁移以及如何用C#做C++包装层
    Axiom3D:Buffer漫谈
    CSS: hover选择器的使用
    TTS 语音修复 ,缺少文件的,没注册类的
    sqlserver 查找某个字段在哪张表里
    Excel 表格查找重复数据,去重复统计
    C# HttpWebResponse WebClient 基础连接已经关闭: 发送时发生错误.
    C# 控件置于最顶层、最底层
    C# 线程 正确使用Thread.Join()停止方式
  • 原文地址:https://www.cnblogs.com/lizhanqi/p/5949691.html
Copyright © 2011-2022 走看看