EasyPermissions的流程

在app的build.gradle文件的dependencies中,添加依賴:java

implementation 'pub.devrel:easypermissions:1.3.0'

 

import android.Manifest;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import java.util.List;

import pub.devrel.easypermissions.AfterPermissionGranted;
import pub.devrel.easypermissions.AppSettingsDialog;
import pub.devrel.easypermissions.EasyPermissions;

public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks{

    private static final int RC_LOCATION = 100;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //進來以後,手動調用申請權限的方法,
        //建議在用到相關功能的時候,纔去請求相關權限,提升用戶體驗
        RequestLocationAndCallPermission();
    }

    //帶有這個註釋的方法,會在某一次請求的全部權限都經過後,纔回調
    @AfterPermissionGranted(RC_LOCATION)
    private void RequestLocationAndCallPermission() {
//        Toast.makeText(this, "RequestLocationAndCallPermission,out", Toast.LENGTH_SHORT).show();
        String[] perms = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.CALL_PHONE};
        if (EasyPermissions.hasPermissions(this, perms)) {
            //用戶贊成了權限
            //進行後面的操做
        } else {
            //用戶拒絕了權限
            //正常狀況(沒有勾選《拒絕後再也不詢問》)會先彈下面這個框一,點擊肯定會出現系統的框二
            //非正常狀況(有勾選《拒絕後再也不詢問》)框一和系統的框二都不會出現
            //不管哪一種狀況,最終,都會根據用戶的選擇贊成仍是拒絕,而回調對應的方法;(勾選過《拒絕後再也不詢問》,這種狀況也是屬於拒絕,因此他也會走拒絕的回調)
            EasyPermissions.requestPermissions(this, "請求定位權限和撥打電話權限",RC_LOCATION, perms);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        // Forward results to EasyPermissions
        // 把請求權限的操做轉交給EasyPermissions
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
    }


    //一次請求中,只要有一個權限容許了,就會走這個方法
    @Override
    public void onPermissionsGranted(int requestCode, List<String> perms) {
        //用戶贊成了部分權限,你能夠對權限作判斷,根據經過的權限,開放相應功能
    }

    //一次請求中,只要有一個權限拒絕了,就會走這個方法
    @Override
    public void onPermissionsDenied(int requestCode, List<String> perms) {
        //若是曾經有勾選《拒絕後再也不詢問》,則會進入下面這個條件
        //建議作一個判斷,判斷用戶是否是剛剛勾選的《拒絕後再也不詢問》,若是是,就不作下面這個判斷,而只進行相應提示,這樣就能夠避免再一次彈框,影響用戶體驗
        //不然就是用戶可能在以前曾經勾選過《拒絕後再也不詢問》,那就能夠用下面這個判斷,強制彈出一個對話框
        if(EasyPermissions.somePermissionPermanentlyDenied(this,perms)){
            //可是這個api有個問題,他會顯示一個對話框,可是這個對話框,點空白區域是能夠取消的,若是用戶點了空白區域,你就沒辦法進行後續操做了
            new AppSettingsDialog.Builder(this).build().show();
        }

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //EasyPermissions會有一個默認的請求碼,根據這個請求碼,就能夠判斷是否是從APP的設置界面過來的
        if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) {
            // Do something after user returned from app settings screen, like showing a Toast.
            //在這兒,你能夠再對權限進行檢查,從而給出提示,或進行下一步操做
            Toast.makeText(this,"從設置中返回", Toast.LENGTH_SHORT).show();
        }
    }
}

 

注意,要在清單文件中,添加權限: <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.CALL_PHONE"/>
官方網站: https://github.com/googlesamples/easypermissions
相關文章
相關標籤/搜索