Android6.0:动态权限申请
来源:互联网 发布:excel把多列数据合并 编辑:程序博客网 时间:2024/05/16 12:38
EasyPermissions
这个是google提供的,github 地址:EasyPermissions
效果图:
gradle
dependencies { ... compile 'pub.devrel:easypermissions:0.2.1' ...}
XML中还是需要声明权限-例:
<uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.READ_CONTACTS" />
步骤
- 重写方法
onRequestPermissionsResult(...)
需要权限的时候,先检查有没有这个权限
- 有:进行逻辑操作
- 没有:请求权限
(可选)让类Activity或Fragment实现
EasyPermissions.PermissionCallbacks
- (可选)系统设置完成后
Step1:onRequestPermissionsResult(…)
官方demo推荐重写这个方法,没发现什么用处
@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); // Forward results to EasyPermissions EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);}
Step2:需要权限的时候,先检查有没有这个权限
if (EasyPermissions.hasPermissions(MainActivity.this, Manifest.permission.CAMERA)) { //有此权限 toast.setText("已经有CAMERA权限了"); toast.show();} else {//没有此权限,需要重新申请 getResources().getString(R.string.positive_button) EasyPermissions.requestPermissions(this, "请求camera权限", RC_CAMERA_PERM, Manifest.permission.CAMERA);}
Step3:让类Activity或Fragment实现EasyPermissions.PermissionCallbacks
implements EasyPermissions.PermissionCallbacks
需要重写的方法:
//同意授权@Overridepublic void onPermissionsGranted(int requestCode, List<String> list) { toast.setText("Granted"); toast.show();}//拒绝授权。 同时点击“不在询问” + 拒绝后,调用这个方法@Overridepublic void onPermissionsDenied(int requestCode, List<String> perms) { //用户点击拒绝后,弹出dialog,点击“确定”会去设置界面 if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { new AppSettingsDialog.Builder(this, "点击确定去设置界面设置权限") .setTitle("Title") .setPositiveButton("确定2") .setNegativeButton("取消2", null /* click listener */) .setRequestCode(requestCode) .build() .show(); }}
Step4;系统设置完成后
在系统设置界面,设置完权限后,返回当前界面后调用这个方法
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_LOCATION_CONTACTS_PERM) { toast.setText("onActivityResult定位和获取联系人权限"); toast.show(); } else if (requestCode == RC_CAMERA_PERM) { toast.setText("onActivityResult拍照权限"); toast.show(); }}
完整代码
public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks { private Toast toast; private static final int RC_CAMERA_PERM = 100;//camera权限 private static final int RC_LOCATION_CONTACTS_PERM = 101;//定位和联系人权限 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toast = Toast.makeText(MainActivity.this, "", Toast.LENGTH_SHORT); findViewById(R.id.btn_camera).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { cameraTask(); } }); findViewById(R.id.btn_location_contracts).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { locationAndContactsTask(); } }); } @AfterPermissionGranted(RC_LOCATION_CONTACTS_PERM) private void locationAndContactsTask() { String[] perms = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_CONTACTS}; if (EasyPermissions.hasPermissions(MainActivity.this, perms)) { toast.setText("已经获取READ_CONTACTS + ACCESS_FINE_LOCATION权限了"); toast.show(); } else { EasyPermissions.requestPermissions(this, "请求定位和联系人权限", RC_LOCATION_CONTACTS_PERM, perms); } } @AfterPermissionGranted(RC_CAMERA_PERM) private void cameraTask() { if (EasyPermissions.hasPermissions(MainActivity.this, Manifest.permission.CAMERA)) { //有此权限 toast.setText("已经有CAMERA权限了"); toast.show(); } else {//没有此权限,需要重新申请 getResources().getString(R.string.positive_button) EasyPermissions.requestPermissions(this, "请求camera权限", RC_CAMERA_PERM, Manifest.permission.CAMERA); } } //官方demo推荐重写这个方法,没发现什么用处 @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); // Forward results to EasyPermissions EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); } //同意授权 @Override public void onPermissionsGranted(int requestCode, List<String> list) { toast.setText("Granted"); toast.show(); } //同时点击“不在询问” + 拒绝后,调用这个方法 @Override public void onPermissionsDenied(int requestCode, List<String> perms) { //用户点击拒绝后,弹出dialog,点击“确定”会去设置界面 if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { new AppSettingsDialog.Builder(this, "点击确定去设置界面设置权限") .setTitle("Title") .setPositiveButton("确定2") .setNegativeButton("取消2", null /* click listener */) .setRequestCode(requestCode) .build() .show(); } } //在系统设置界面,设置完权限后,返回当前界面后调用这个方法 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_LOCATION_CONTACTS_PERM) { toast.setText("onActivityResult定位和获取联系人权限"); toast.show(); } else if (requestCode == RC_CAMERA_PERM) { toast.setText("onActivityResult拍照权限"); toast.show(); } }}
0 0
- android6.0 动态申请权限
- Android6.0动态权限申请
- Android6.0:动态权限申请
- Android6.0动态申请权限
- android6.0 动态申请权限
- android6.0 动态权限申请
- Android6.0动态权限申请
- Android6.0动态权限申请
- android6.0 动态申请权限
- Android6.0动态权限申请
- android6.0动态权限申请
- Android6.0动态权限申请
- Android6.0动态权限申请
- Android6.0动态权限申请
- Android6.0动态申请权限
- Android6.0动态申请权限
- ANDROID6.0权限部分动态申请
- android6.0以上动态申请权限问题。
- JavaScript substr() 和 substring() 方法的区别
- 打印[unsigned] int/ long/long long
- 防火墙设置:虚拟机ping不通主机,但是主机可以ping通虚拟机
- 论文笔记之Spectral Networks and Deep Locally Connected Networks on Graphs
- bootstrap用validate简单实现校验
- Android6.0:动态权限申请
- android清空SD卡文件夹
- S5PV210-UART-笔记整理
- 栈的应用——数制转换
- sqlserver 批量删除存储过程
- JSON字符串的处理
- Java时间戳与Date相互转化
- ucore lab1
- 使用pandas进行数据清洗