rxpermissions+rxjava2.0
1.添加依赖:
compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0.5' compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.3@aar'
2.清单文件添加权限:
<!-- protection level is dangerous, need request runtime permission --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.READ_CALL_LOG"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.READ_CALENDAR"/> <uses-permission android:name="android.permission.SEND_SMS"/> <uses-permission android:name="android.permission.READ_SMS"/> <uses-permission android:name="android.permission.CALL_PHONE"/>
3.MainActivity测试:
/** * rxPermission使用的注意事项: * (1) minSdkVersion必须 >= 11。 (2) 使用RxPermissions申请权限,必须在Activity.onCreate() 或者View.onFinishInflate()中处理。 不能在onResume()中处理,因为onResume() 在App的生命周期中可能执行的很频繁。如果在请求权限的时候, App重新启动了(例如屏幕旋转导致的App关闭再重新创建), 那么用户的选择(允许 或者 拒绝)将无法发给App。 更多讨论,请参考:https://github.com/tbruyelle/RxPermissions/issues/69 * * * */ public class MainActivity extends AppCompatActivity { private static final String TAG = "RxPermissionTest"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); requestPermissions(); } private void requestPermissions() { RxPermissions rxPermission = new RxPermissions(MainActivity.this); rxPermission .requestEach(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_CALENDAR, Manifest.permission.READ_CALL_LOG, Manifest.permission.READ_CONTACTS, Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_SMS, Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA, Manifest.permission.CALL_PHONE, Manifest.permission.SEND_SMS) .subscribe(new Consumer<Permission>() { @Override public void accept(Permission permission) throws Exception { if (permission.granted) { // 用户已经同意该权限 Log.d(TAG, permission.name + " is granted."); } else if (permission.shouldShowRequestPermissionRationale) { // 用户拒绝了该权限,没有选中『不再询问』(Never ask again),那么下次再次启动时,还会提示请求权限的对话框 Log.d(TAG, permission.name + " is denied. More info should be provided."); } else { // 用户拒绝了该权限,并且选中『不再询问』 Log.d(TAG, permission.name + " is denied."); } } }); } }
显示效果如下: