Android6.0使用RxPermissions获取运行时权限

来源:互联网 发布:水货导师 知乎 编辑:程序博客网 时间:2024/05/21 05:40

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>
阅读全文
0 0
原创粉丝点击