Android權限申請-多個權限

基於PermissionsDispatcher   

package com.ycz.at_cdm_station;

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.provider.Settings;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.core.app.ActivityCompat;

import com.alibaba.android.arouter.facade.annotation.Route;
import com.lljjcoder.style.citylist.Toast.ToastUtils;
import com.transformers.common.mvp.BaseActivity;
import com.transformers.common.provider.IMainProvider;
import com.transformers.common.util.SystemUtil;
import com.transformers.common.util.ToastUtil;
import com.transformers.common.util.log.KLogUtil;
import com.transformers.main.MainActivity;

import permissions.dispatcher.NeedsPermission;
import permissions.dispatcher.OnNeverAskAgain;
import permissions.dispatcher.OnPermissionDenied;
import permissions.dispatcher.OnShowRationale;
import permissions.dispatcher.PermissionRequest;
import permissions.dispatcher.RuntimePermissions;

/**
 * author: jiaxufei(<a href="mailto:[email protected]">[email protected]</a>)<br>
 * version: 1.0.0<br>
 * since: 2020-03-27 16:54<br>
 *
 * <p>
 * 內容描述區域
 * </p>
 */
@RuntimePermissions
public class SplashActivity extends BaseActivity {
    //是否已經授權
    private boolean isAllowPermissions = false;

    @Override
    public int onBindLayout() {
        return R.layout.activity_main_splash;
    }

    @Override
    public void initView() {
        if (!isAllowPermissions) {
            SplashActivityPermissionsDispatcher.requestPermissionWithPermissionCheck(SplashActivity.this);
        } else {
            requestPermission();
        }

        //全屏
        Window window = getWindow();
        window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        startMainActivity();

    }

    @Override
    public boolean enableToolbar() {
        return false;
    }

    @Override
    public void initData() {

    }

    public void startMainActivity() {
//        startActivity(new Intent(this, MainActivity.class));
//        finish();
    }


    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
       SplashActivityPermissionsDispatcher.onRequestPermissionsResult(  SplashActivity.this, requestCode, grantResults);
    }
    /**
     * 只有全部成功時,纔會調用  2,撥打電話需要CALL_PHONE權限,在對應的方法是標明
     */
    @NeedsPermission({Manifest.permission.CALL_PHONE,Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE})
    public void requestPermission() {
        isAllowPermissions = true;
        Toast.makeText(SplashActivity.this, "申請權限成功", Toast.LENGTH_SHORT).show();

    }
    /**
     * 只要有一個權限沒有申請成功,且沒有選擇"以後不再詢問",則提示失敗
     */
    @OnPermissionDenied({Manifest.permission.CALL_PHONE,Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE})
    public void requestPermissionDenied() {
        Toast.makeText(SplashActivity.this, "申請權限失敗", Toast.LENGTH_SHORT).show();

    }
    /**
     * 申請失敗後,再申請則調用 對需要該權限的解釋
     *
     * @param permissionRequest
     */
    @OnShowRationale({Manifest.permission.CALL_PHONE,Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE})
    public void requestPermissionShowRationale(final PermissionRequest permissionRequest) {
        new AlertDialog.Builder(this).setMessage("是否授權手機權限")
                .setPositiveButton("確定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {//確定後,則彈出申請權限的提示
                        permissionRequest.proceed();
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {//取消後,調用requestPermissionDenied
                        permissionRequest.cancel();
                    }
                }).show();
    }
    /**
     * 只要有一個申請失敗,且選擇了"以後不再詢問",則提示
     */
    @OnNeverAskAgain({Manifest.permission.CALL_PHONE,Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE,})
    public void requestPermissionNeverAskAgain() {
        new AlertDialog.Builder(this)
                .setMessage("應用權限被拒絕,爲了不影響您的正常使用,請在 權限 中開啓對應權限?")
                .setPositiveButton("確定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //引導用戶至設置頁手動授權
                        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                        Uri uri = Uri.fromParts("package", SplashActivity.this.getPackageName(), null);
                        intent.setData(uri);
                        startActivity(intent);
                        dialog.dismiss();
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                })
                .show();    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章