情境
在 如何使用 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 的範例了。