Android 6.0 要单独的获取权限 
这里提供两种很简单的方法

  • EasyPermition
  • RxPermition

EasyPermition

https://github.com/googlesamples/easypermissions

dependencies {
//6.0 permition
compile 'pub.devrel:easypermissions:0.1.7'
}

在启动的Activity添加如下代码

public class LoginActivity extends Activity implements EasyPermissions.PermissionCallbacks {
private static final int RC_CAMERA_PERM = ;
private static final int RC_LOCATION_CONTACTS_PERM = ; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
requestPermissions();
} private void requestPermissions() {
//要获取的权限
String[] perms = {Manifest.permission.INTERNET, Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (EasyPermissions.hasPermissions(this, perms)) {
// Have permissions, do the thing!
Toast.makeText(this, "TODO: Location and Contacts things", Toast.LENGTH_LONG).show();
} else {
// Ask for both permissions
EasyPermissions.requestPermissions(this, getString(R.string.rationale_location_contacts),
RC_LOCATION_CONTACTS_PERM, perms);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
} @Override
public void onPermissionsGranted(int requestCode, List<String> perms) {
Log.d(TAG, "onPermissionsGranted:" + requestCode + ":" + perms.size());
} @Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
Log.d(TAG, "onPermissionsDenied:" + requestCode + ":" + perms.size());
EasyPermissions.checkDeniedPermissionsNeverAskAgain(this,
getString(R.string.rationale_ask_again),
R.string.setting, R.string.cancel, perms);
}
}

RxPermition

https://github.com/tbruyelle/RxPermissions

dependencies {
compile 'com.tbruyelle.rxpermissions:rxpermissions:0.7.0@aar'
}

同样在启动的Activity

public class LoginActivity extends Activity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login); Observable<Boolean> request = RxPermissions.getInstance(Global.getContext())
.request(
Manifest.permission.WRITE_EXTERNAL_STORAGE//文件读写
/* Manifest.permission.READ_CONTACTS,//联系人
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.ACCESS_FINE_LOCATION*/
);
request.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean granted) {
if (granted) {
startActivity(new Intent(LoginActivity.this, MainActivity.class));
}
}
});
}
}

针对RxPermition、写了个工具类 大家可以参考如下

public class PermissionsUtils {

    public static Observable<Boolean> getFileAndContactsAndLocationGrant() {
Observable<Boolean> request = RxPermissions.getInstance(Global.getContext())
.request(
Manifest.permission.WRITE_EXTERNAL_STORAGE,//文件读写
Manifest.permission.READ_CONTACTS,//联系人
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.ACCESS_FINE_LOCATION
);
return request;
} public static Observable<Boolean> getCameraAndAudioGrant() {
Observable<Boolean> request = RxPermissions.getInstance(Global.getContext())
.request(
Manifest.permission.CAMERA,//摄像头
Manifest.permission.RECORD_AUDIO//麦克风
);
return request;
}
/**
* 引导到设置界面
* @param activity
* @param isFinish
*/
@MainThread
public static void showPermissionDeniedDialog(final Activity activity, final boolean isFinish) {
DialogDeleteFriend dialog = new DialogDeleteFriend(activity, R.style.MyDialogBg);
dialog.show();
dialog.setIBtnListener(new IBtnClickListener() {
@Override
public void btnOk() {
Intent intent = new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
activity.startActivity(intent);
if (isFinish) activity.finish();
} @Override
public void btnCancle() {
if (isFinish) activity.finish();
}
});
dialog.updateType(DialogDeleteFriend.TYPE_TO_GRANTED);
}
}

用法如下

/**
* 获取授权后加载登录信息,并进入登录界面 如果没获取到权限则引导到设置页面
*/
private void getGrantedAndInitLoginInfo() {
rx.Observable<Boolean> grantObservable = PermissionsUtils.getFileAndContactsAndLocationGrant();
grantObservable.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean granted) {
if (granted) {
//do somthing 6.0以后需要权限
} else {
PermissionsUtils.showPermissionDeniedDialog(SplashActivity.this, true);
}
}
});
}

Android 6.0 最简单的权限获取方法 RxPermition EasyPermition的更多相关文章

  1. Android 6.0 超级简单的权限申请2 (Permission)

    代码地址如下:http://www.demodashi.com/demo/13506.html 写在前面 上次写了一个权限申请的例子Android 6.0 超级简单的权限申请 (Permission) ...

  2. Android 6.0 超级简单的权限申请 (Permission)

    代码地址如下:http://www.demodashi.com/demo/13369.html 背景描述 随着Android系统的不断升级,谷歌对用户的隐私是越来越注重了,给我们开发者带来了更多的繁琐 ...

  3. Android 6.0的运行时权限

    原文  http://droidyue.com/blog/2016/01/17/understanding-marshmallow-runtime-permission/ 主题 安卓开发   Andr ...

  4. 聊一聊 Android 6.0 的运行时权限

    权限一刀切 棉花糖运行时权限 权限的分组 正常权限 正常权限列表 特殊权限危险权限 请求SYSTEM_ALERT_WINDOW 请求WRITE_SETTINGS 必须要支持运行时权限么 不支持运行时权 ...

  5. 聊一聊Android 6.0的运行时权限

    Android 6.0,代号棉花糖,自发布伊始,其主要的特征运行时权限就很受关注.因为这一特征不仅改善了用户对于应用的使用体验,还使得应用开发者在实践开发中需要做出改变. 没有深入了解运行时权限的开发 ...

  6. android 开发 实现多个动态权限的方法(并且兼容6.0以下的版本权限授权)

    android开发权限授权因为版本的不同有不同的授权方式,6.0以下的版本使用的是在注册表中添加权限的静态授权(这种授权权限提示只会出现在app安装的时候),而6.0以上(包含6.0)就需要动态授权的 ...

  7. 安卓从业者应该关注:Android 6.0的运行时权限

    Android 6.0,代号棉花糖,自发布伊始,其主要的特征运行时权限就很受关注.因为这一特征不仅改善了用户对于应用的使用体验,还使得应用开发者在实践开发中需要做出改变. 没有深入了解运行时权限的开发 ...

  8. Android 5.0 版本 USB 调试模式打开方法

    Android 4.2 版本 USB 调试模式打开方法 1. 进入“设置”页面,点击“关于平板电脑”.见下图红色方框.   2. 疯狂点击“版本号”,见下图红色方框,直到出现“您现在处于开发者模式!” ...

  9. 【腾讯优测干货分享】Android内存泄漏的简单检查与分析方法

    本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d14047603a5bf1242ad01b 导语 内存泄漏问题大约是An ...

随机推荐

  1. c#多线程操作测试(阻塞线程,结束任务)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. vue.js路由vue-router(一)——简单路由基础

    前言 vue.js除了拥有组件开发体系之外,还有自己的路由vue-router.在没有使用路由之前,我们页面的跳转要么是后台进行管控,要么是用a标签写链接.使用vue-router后,我们可以自己定义 ...

  3. idea和Pycharm 等系列产品激活激活方法和激活码

    引用自大神:雪中皓月原文链接 --------------------- 以下两种方法均可用于激活Idea,Pycharm等jetbrains系列产品第一种方法:使用现有的注册服务器优点:快捷,方便, ...

  4. react-native signatures do not match the previously installed version;

    原因:手机上已经安装过打包后的apk应用,与真机调试无法共存. 解决办法:删除手机上已经安装过的apk应用.

  5. IT人都欠自已一个Lable Page

    平时, 你是不是喜欢将一些工作或者技术的网站都会Mark一下.慢慢,自已收藏的标签越来越多.收藏后去查找的比较麻烦,而且不是很方便. 下面的文章是介绍我自已是怎么实现一个简单的Lable Page. ...

  6. Oracle Database Sample Schemas

    本文在Creative Commons许可证下发布 最近在钻研Oracle 11gR2,写SQL缺乏Demo表,研究他家的官方资料时发现一块甲骨文已经给我们准备Sample Schemas.比如说SC ...

  7. 兼容IE浏览器的canvas画线和圆圈

    1.新建test.html文件,代码如下: <!DOCTYPE html><html><head>    <meta charset="utf-8& ...

  8. SQL char字段类型排序

    我是做的ACCESS时候需要对字段的值进行排序,字段格式是char类型的,但是存的值是数字.现在需要对该字段进行排序. 通过查找,找到以下两种方法,记录下来. 1. 你可以转换成int型再排序 sel ...

  9. [转]Massive Model Rendering Techniques

    Massive Model Rendering Techniques Andreas Dietrich Enrico Gobbetti Sung-Eui Yoon Abstract We presen ...

  10. 单线程实现检索当当网泄露的1GB用户数据

     新建项目dangdangusersearch 2.编写头文件head.h #ifndef _HEAD_H_ #define _HEAD_H_ #include <stdio.h>   ...