【Android】permissions4m 库解决系统运行时权限使用记录
来源:互联网 发布:wow插件mac版 编辑:程序博客网 时间:2024/06/07 10:34
参考文章:http://blog.csdn.net/ziwang_/article/details/77435271
http://blog.csdn.net/lmj623565791/article/details/50709663
permissions4m 地址:https://github.com/jokermonn/permissions4m
正文:
当 targetSdkVersion 值设置23以上,就会涉及到系统运行时权限,我这边体验了一下permissions4m 这个库,还不错,记录一下
引入方式
项目的build.gradle:
allprojects {
repositories { jcenter() // 请添加如下一行 maven { url 'https://jitpack.io' } }}
app 中的 build.gradle:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.3.1' testCompile 'junit:junit:4.12' compile 'com.github.jokermonn:permissions4m:2.1.0-lib' annotationProcessor 'com.github.jokermonn:permissions4m:2.1.0-processor'}
使用方式
我这边暂时处理打电话和打开通讯录,在AndroidManifest.xml里面设置权限:
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_CONTACTS" />
MainActivity.java 这个类调用如下:
import android.Manifest;
import android.content.DialogInterface;import android.content.Intent;import android.net.Uri;import android.provider.ContactsContract;import android.support.annotation.NonNull;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import com.joker.annotation.PermissionsDenied;import com.joker.annotation.PermissionsGranted;import com.joker.annotation.PermissionsNonRationale;import com.joker.annotation.PermissionsRationale;import com.joker.api.Permissions4M;public class MainActivity extends AppCompatActivity { Button call_phone, phone_log,open_camera; private static final int CALL_PHONE_CODE = 1; private static final int CALL_LOG_CODE = 2; private static final int REQUEST_CONTACT = 3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViews(); addListener(); } private void findViews() { call_phone = (Button) findViewById(R.id.call_phone); phone_log = (Button) findViewById(R.id.phone_log); open_camera = (Button) findViewById(R.id.open_camera); } private void addListener() { /**打电话**/ call_phone.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //申请权限 Permissions4M.get(MainActivity.this) // 是否强制弹出权限申请对话框,建议为 true .requestForce(true) // 申请权限 .requestPermissions(Manifest.permission.CALL_PHONE) // 权限码 .requestCodes(CALL_PHONE_CODE) // 如果需要使用 @PermissionNonRationale 注解的话,建议添加如下一行 // 返回的 intent 是跳转至**系统设置页面** //.requestPageType(Permissions4M.PageType.MANAGER_PAGE) // 返回的 intent 是跳转至**手机管家页面** .requestPageType(Permissions4M.PageType.ANDROID_SETTING_PAGE) .request(); } }); /**通讯录**/ phone_log.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Permissions4M.get(MainActivity.this) .requestPermissions(Manifest.permission.READ_CONTACTS,Manifest.permission.WRITE_CONTACTS) .requestCodes(CALL_LOG_CODE) //.requestPageType(Permissions4M.PageType.MANAGER_PAGE) .requestPageType(Permissions4M.PageType.MANAGER_PAGE) .request(); } }); } //------------------------------------------------------------------------------------ //授权成功时回调 @PermissionsGranted({CALL_PHONE_CODE, CALL_LOG_CODE}) public void granted(int code) { switch (code) { case CALL_PHONE_CODE: //ToastUtil.show("权限授权成功"); Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:xxxxxx")); startActivity(intent); break; case CALL_LOG_CODE: //ToastUtil.show("权限授权成功"); Intent intent2 = new Intent(); intent2.setAction(Intent.ACTION_PICK); intent2.setData(ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent2, REQUEST_CONTACT); break; } } //授权失败时回调 @PermissionsDenied({CALL_PHONE_CODE, CALL_LOG_CODE}) public void denied(int code) { switch (code) { case CALL_PHONE_CODE: //ToastUtil.show("权限授权失败"); break; case CALL_LOG_CODE: //ToastUtil.show("权限授权失败"); break; } } //二次授权时回调,用于解释为何需要此权限 @PermissionsRationale({CALL_PHONE_CODE, CALL_LOG_CODE}) public void rationale(int code) { switch (code) { case CALL_PHONE_CODE: //ToastUtil.show("请开启权限授权"); break; case CALL_LOG_CODE: //ToastUtil.show("请开启权限授权"); break; } } //------------------------------------------------------------------------------------ @PermissionsNonRationale({CALL_PHONE_CODE, CALL_LOG_CODE}) public void storageAndCallRationale(int code, final Intent intent) { switch (code) { case CALL_PHONE_CODE: new AlertDialog.Builder(MainActivity.this) .setMessage("亲爱的用户,我们需要您开启打电话权限\n请点击前往设置页面") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { startActivity(intent); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }) .show(); break; case CALL_LOG_CODE: new AlertDialog.Builder(MainActivity.this) .setMessage("亲爱的用户,我们需要您开启读取通讯录权限\n请点击前往设置页面") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { startActivity(intent); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }) .show(); break; default: break; } } //------------------------------------------------------------------------------------ //必加的二次权限申请回调 //在 Activity 或 Fragment 中,需要手动添加 onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) // 方法以支持权限申请回调,代码如下即可: @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { Permissions4M.onRequestPermissionsResult(MainActivity.this, requestCode, grantResults); super.onRequestPermissionsResult(requestCode, permissions, grantResults); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CONTACT) { if (resultCode == RESULT_OK) { if (data == null) { return; } Uri result = data.getData(); } } }}
界面上面就是两个Button。
附录系统运行时权限组:
group:android.permission-group.CONTACTS
permission:android.permission.WRITE_CONTACTSpermission:android.permission.GET_ACCOUNTSpermission:android.permission.READ_CONTACTSgroup:android.permission-group.PHONEpermission:android.permission.READ_CALL_LOGpermission:android.permission.READ_PHONE_STATEpermission:android.permission.CALL_PHONEpermission:android.permission.WRITE_CALL_LOGpermission:android.permission.USE_SIPpermission:android.permission.PROCESS_OUTGOING_CALLSpermission:com.android.voicemail.permission.ADD_VOICEMAILgroup:android.permission-group.CALENDARpermission:android.permission.READ_CALENDARpermission:android.permission.WRITE_CALENDARgroup:android.permission-group.CAMERApermission:android.permission.CAMERAgroup:android.permission-group.SENSORSpermission:android.permission.BODY_SENSORSgroup:android.permission-group.LOCATIONpermission:android.permission.ACCESS_FINE_LOCATIONpermission:android.permission.ACCESS_COARSE_LOCATIONgroup:android.permission-group.STORAGEpermission:android.permission.READ_EXTERNAL_STORAGEpermission:android.permission.WRITE_EXTERNAL_STORAGEgroup:android.permission-group.MICROPHONEpermission:android.permission.RECORD_AUDIOgroup:android.permission-group.SMSpermission:android.permission.READ_SMSpermission:android.permission.RECEIVE_WAP_PUSHpermission:android.permission.RECEIVE_MMSpermission:android.permission.RECEIVE_SMSpermission:android.permission.SEND_SMSpermission:android.permission.READ_CELL_BROADCASTS
知行办公,专业移动办公平台 https://zx.naton.cn/
原创团队
【总监】十二春秋之,3483099@qq.com;
【Master】zelo,616701261@qq.com;【运营】运维艄公,897221533@qq.com;
【产品设计】流浪猫,364994559@qq.com;【体验设计】兜兜,2435632247@qq.com;
【iOS】淘码小工,492395860@qq.com;iMcG33K,imcg33k@gmail.com;
【Android】人猿居士,1059604515@qq.com;思路的顿悟,1217022114@qq.com;
【java】首席工程师MR_W,feixue300@qq.com;【测试】土镜问道,847071279@qq.com;
【数据】fox009521,42151960@qq.com;【安全】保密,你懂的。
阅读全文
0 0
- 【Android】permissions4m 库解决系统运行时权限使用记录
- Android 权限申请最佳适配方案——permissions4m
- android 运行时权限 github 库 [附文章][记录]
- Android运行时权限问题记录
- PermissionsDispatcher库的使用(简单处理Android 6.0系统中的运行时权限的开源库)
- Android M系统运行时权限封装
- 十分钟解决Android 6x以上系统运行时权限教程
- Android系统权限(含6.0的运行时权限)
- Android 运行时权限库
- Android不使用支持库请求运行时权限
- 国产 Android 权限申请最佳适配方案 —— permissions4m
- 国产 Android 权限申请最佳适配方案——permissions4m
- 国产 Android 权限申请最佳适配方案 —— permissions4m
- 国产 Android 权限申请最佳适配方案 —— permissions4m
- 国产 Android 权限申请最佳适配方案——permissions4m
- Android使用记录访问权限
- Android 运行时权限
- android运行时权限
- html css3不拉伸图片显示效果,类似淘宝的
- 学习linux协议栈关键数据结构
- Project Euler 11-15题
- 实践中学帆软(一)
- Vim常用命令
- 【Android】permissions4m 库解决系统运行时权限使用记录
- JAVA编程思想学习 --- 第八章 (对象的容纳)
- 搭建vsftpd服务器及简单配置
- 引用表格数据
- HDOJ HDU 1109 Run Away
- 关于sql里left join的效率问题
- Eclipse或myEclipse里,没有Project Facets选项的问题(将maven工程转成web工程)
- Elasticsearch入门2 导入导出数据
- JavaWeb:JDBC之事务