1.添加依赖
compile 'com.tbruyelle.rxpermissions:rxpermissions:0.7.0@aar'
compile 'io.reactivex:rxjava:1.1.3'
2.在清单文件中加入权限
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECEIVE_MMS" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
3.代码实现
MainActivity.java
package com.zhoujian.mpermissions;
import android.Manifest;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.tbruyelle.rxpermissions.Permission;
import com.tbruyelle.rxpermissions.RxPermissions;
import rx.Observable;
import rx.functions.Action1;
public class MainActivity extends AppCompatActivity {
private Button mButtonOne;
private Button mButton;
private Button mBtnCallPhone;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
clickEvent();
}
public void initViews() {
mButton = (Button) findViewById(R.id.id_btn_button);
mButtonOne = (Button) findViewById(R.id.id_button);
mBtnCallPhone = (Button) findViewById(R.id.id_btn_callphone);
}
private void clickEvent() {
//打电话的权限,请求单个权限
mBtnCallPhone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RxPermissions mPermissions = RxPermissions.getInstance(MainActivity.this);
Observable<Boolean> mRequest = mPermissions.request(Manifest.permission.CALL_PHONE);
mRequest.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
if (aBoolean) {
Toast.makeText(MainActivity.this, "获取打电话权限成功", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + 10086));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} else {
Toast.makeText(MainActivity.this, "获取打电话权限失败", Toast.LENGTH_SHORT).show();
}
}
});
}
});
//同时请求多个权限
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RxPermissions.getInstance(MainActivity.this)
.request(Manifest.permission.RECEIVE_MMS,
Manifest.permission.READ_CALL_LOG)//多个权限用","隔开
.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
if (aBoolean) {
//当所有权限都允许之后,返回true
Toast.makeText(MainActivity.this, "权限允许", Toast.LENGTH_SHORT).show();
} else {
//只要有一个权限禁止,返回false
Toast.makeText(MainActivity.this, "拒绝", Toast.LENGTH_SHORT).show();
}
}
});
}
});
//分别申请多个权限
mButtonOne.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RxPermissions.getInstance(MainActivity.this)
//分别申请多个权限时,使用requestEach
.requestEach(Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.RECORD_AUDIO,
Manifest.permission.CAMERA)
.subscribe(new Action1<Permission>() {
@Override
public void call(Permission permission) {
if (permission.name.equals(Manifest.permission.ACCESS_FINE_LOCATION)) {
//当ACCESS_FINE_LOCATION权限获取成功时,permission.granted=true
Log.i("permissions", Manifest.permission.ACCESS_FINE_LOCATION + ":" + permission.granted);
}
if (permission.name.equals(Manifest.permission.RECORD_AUDIO)) {
//当RECORD_AUDIO 权限获取成功时,permission.granted=true
Log.i("permissions", Manifest.permission.RECORD_AUDIO + ":" + permission.granted);
}
if (permission.name.equals(Manifest.permission.CAMERA)) {
//当CAMERA权限获取成功时,permission.granted=true
Log.i("permissions", Manifest.permission.CAMERA + ":" + permission.granted);
}
}
});
}
});
}
}
activity_main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<Button
android:id="@+id/id_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="分别请求多个权限"/>
<Button
android:id="@+id/id_btn_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="同时请求多个权限"/>
<Button
android:id="@+id/id_btn_callphone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请求单个权限"/>
</LinearLayout>