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:jiaxufei@danlu.com">jiaxufei@danlu.com</a>)<br>
 * version: 1.0.0<br>
 * since: 2020-03-27 16:54<br>
 *
 * <p>
 * 内容描述区域
 * </p>
 */
@RuntimePermissions
public class SplashActivity extends BaseActivity {
    private TextView tv_phone;
    //是否已经授权
    private boolean isAllowPermissions = false;

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

    @Override
    public void initView() {
        tv_phone = findViewById(R.id.tv_phone);
        SplashActivityPermissionsDispatcher.requestPermissionWithPermissionCheck(this);
        tv_phone.setOnClickListener(v -> {
            //拨号方法]
            if (!isAllowPermissions) {
                SplashActivityPermissionsDispatcher.callPhoneWithPermissionCheck(SplashActivity.this);
            } else {
                callPhone();
            }
        });
        //全屏
        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();
    }

    /**
     * 2,拨打电话需要CALL_PHONE权限,在对应的方法是标明
     */
    @NeedsPermission(Manifest.permission.CALL_PHONE)
    void callPhone() {
        isAllowPermissions = true;
        Intent intent = new Intent(Intent.ACTION_CALL);
        Uri data = Uri.parse("tel:10086");
        intent.setData(data);
        startActivity(intent);
    }


    /**
     * ,3,对需要该权限的解释
     */
    @OnShowRationale(Manifest.permission.CALL_PHONE)
    void showWhy(final PermissionRequest request) {
        new AlertDialog.Builder(this)
                .setMessage("是否授权手机权限?")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        request.proceed();
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        request.cancel();
                    }
                })
                .show();
    }

    /**
     * ,4,当用户拒绝获取权限的提示
     */
    @OnPermissionDenied(Manifest.permission.CALL_PHONE)
    void showDenied() {
        Toast.makeText(SplashActivity.this, "无法获得权限", Toast.LENGTH_SHORT).show();
    }

    /**
     * ,5,当用户勾选不再提示并且拒绝的时候调用的方法
     */
    @OnNeverAskAgain(Manifest.permission.CALL_PHONE)
    void showNeverAskAgain() {
        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();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
       SplashActivityPermissionsDispatcher.onRequestPermissionsResult(  SplashActivity.this, requestCode, grantResults);
    }
    
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄毛火烧雪下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值