1. 程式人生 > >Android 許可權調研續集

Android 許可權調研續集

前言

晚上騎車回去的,想到了行者GPS開關的判定,遂想對位置許可權做補充,續寫一下位置許可權的調研。

目標

申請位置許可權的時候獲取一下GPS開關是否開啟,以應對要求精準定位的場景,在之前的demo上做擴充套件。

實現

因為要處理位置開關,所以,我們不得不封裝一個BaseActivity,當然也完全可以將之前的許可權申請方法寫在BaseActivity裡面,如果需要許可權回執之後做相關操作,在相關Activity複寫父類的回撥方法就行。 工具類新增檢測方法:

  /**
     * 檢測GPS是否開啟
     */
    public static void showGPSContacts(final BaseActivity activity) {
        LocationManager lm = (LocationManager) activity.getSystemService(activity.LOCATION_SERVICE);
        if (!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            showNormalDialog(activity, "檢測到你未開通GPS,我們需要精準位置,希望您能夠開啟", "去開啟", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Intent intent = new Intent();
                    intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    activity.startActivityForResult(intent, PRIVATE_CODE);
                }
            });
        }else {
            activity.doNextPermissionRequest();
        }
    }

在BaseActivity處理回執邏輯:

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case PermissionUtils.PRIVATE_CODE:
                doNextPermissionRequest();
                break;

        }
    }

    /**
     * GPS申請回來回撥
     */
    protected void doNextPermissionRequest() {

    }

然後當我們申請的許可權裡面需要開通GPS的時候,就在相關的Activity裡Override doNextPermissionRequest方法,並申請相關的方法,我這裡沒有關注是否必須開啟GPS,可以做相關的判斷,回來之後在判斷一次。

image