如何使用Runtime Permission-使用EasyPermissions

如何使用Runtime Permission-使用EasyPermissions

情境

如何使用 Runtime Permission 當中我們知道許多權限是需要使用者同意才可以使用的
可是在跟使用者取得權限的程式碼卻是十分的複雜
因此有第三方開發出很簡便的要權限的程式
這個第三方就是 EasyPermissions

用法

目前版本是 0.3.0
未來可能會是更高的版本
請依自己的需求來進行調整

首先在 Gradle 內加入這個第三方的 library

compile 'pub.devrel:easypermissions:0.3.0'

權限

在 AndroidManifest.xml 要先加上你要開啟的權限
假設我們要開啟 Camera 的權限
就必須在 的上方加上

<uses-permission android:name="android.permission.CAMERA" />

完整程式碼

你可以直接到 GitHub 上面看完整的程式碼

程式碼說明

一開始我們的 activity_main.xml 的佈局會是長這樣

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    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/get_permission"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="要權限" />
</RelativeLayout>

就會看到以下的畫面





接著來到我們的主程式 MainActivity.java

public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.get_permission);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String[] perms = {Manifest.permission.CAMERA};
                if (!EasyPermissions.hasPermissions(MainActivity.this, perms)) {
                    EasyPermissions.requestPermissions(MainActivity.this, "拍照需要相機權限",
                            100, perms);
                }
            }
        });

    }

    @Override
    public void onPermissionsGranted(int requestCode, List<String> perms) {

    }

    @Override
    public void onPermissionsDenied(int requestCode, List<String> perms) {

    }
}

在這邊我們可以看到 Activity 實作了 EasyPermissions.PermissionCallbacks
因此我們會覆寫兩個方法

@Override
public void onPermissionsGranted(int requestCode, List<String> perms) {

}

@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {

}

那在 Runtime 跟 User 要求權限則是

String[] perms = {Manifest.permission.CAMERA};
if (EasyPermissions.hasPermissions(MainActivity.this, perms)) {

} else {
    EasyPermissions.requestPermissions(MainActivity.this, "拍照需要相機權限",
            100, perms);
}

按下按鈕就會跳出





那如果你第一次拒絕
第二次再進來仍然還是會在要一次
就會跳出我們預設的訊息




接著會跳出要求權限的對話框
只是旁邊會多一個 CheckBox 跟你確認是否不要再詢問了




那你會說如果我要兩個權限呢?
很簡單只要在陣列內再加入一個權限就可以了

String[] perms = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};

記得在 AndroidManifest.xml 內再追加一個權限

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

這樣你就會看到 Dialog 多了一個 1/2 的數字





這樣就是一個簡單操作 EasyPermissions 的範例了。