Android 6.0 动态申请权限
来源:互联网 发布:吉林大学网络教育查询 编辑:程序博客网 时间:2024/05/03 04:00
从6.0开始,谷歌从苹果那里学习了iOS的动态申请权限这一套(或者是从其他ROM那里借鉴的)。于是,我们的app就不能安装上就一劳永逸了,需要在运行过程要用到某个权限的时候先检查权限是否获取,否的话还要动态申请。
下面整理用代码说明一下整个过程。首先仍然要在menifest.xml中标明需要申请的权限,这里以读取联系人为例。App需要设置target SDK为23(Android6.0)。
<uses-permission android:name="android.permission.READ_CONTACTS" />
在需要用在权限的地方
package com.example.stone.permisson6demo;import android.Manifest; ...public class MainActivity extends AppCompatActivity { // 这里有个坑,一般我们的code会设置为int类型,但是如果这个值设置为大于255的话会报错提示这个code只会用到8 bits! private static final char MY_PERMISSIONS_REQUEST_READ_CONTACTS = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 当用户曾经拒绝过授权申请,则系统会建议你explain一下申请权限的原因,弹框说明。 if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.READ_CONTACTS)) { showPermissionDialog(); } else { showMessage("不用问直接请求?"); // 不用explain的话直接申请了,系统会弹标准的对话框申请,我们要自己设置一个requestCode,后边会用到。 ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS); } } else { showMessage("可以看通信录了"); } } }); } private void showPermissionDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setPositiveButton("阔以", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS); } }).setNegativeButton("不滴", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { showMessage("搞毛"); } }).setTitle("老子要看通讯录").create().show(); } ... @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { // 判断是否成功授权,不用解释了 switch (requestCode) { case MY_PERMISSIONS_REQUEST_READ_CONTACTS: if(grantResults.length > 0) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { showMessage("阔以读取了"); } else { showMessage("尼玛。。。"); } } else { } break; } super.onRequestPermissionsResult(requestCode, permissions, grantResults); } private void showMessage(String message) { Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show(); }}
0 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权限动态申请
- Android 6.0 动态申请权限
- Android 6.0动态权限申请
- Android 6.0动态权限申请
- android 6.0动态申请权限
- Android 6.0 动态权限申请
- Android 6.0动态申请权限
- Android 6.0 动态权限申请
- Redis持久化
- gSpan频繁子图挖掘算法
- UICollectionView不能实现touch方法
- Spark SPARK_WORKER_DIR 磁盘满
- CBA算法---基于关联规则进行分类的算法
- Android 6.0 动态申请权限
- poj 3187 Backward Digit Sums 【STL暴力】
- hdu 1015 Safecracker【dfs 排列组合】
- AdaBoost装袋提升算法
- Eclipse下tomcat更改发布目录
- redis 学习手册之发布和订阅pubsub操作
- nodejs+mongodb系列教程之(2/5)--认识express4构建的nodes项目
- 网页上传文件,到服务器,再讲数据导入数据库
- Objective-C Block的实现