Android 动态权限申请 BaseActivity 封装 拨打电话

 2023-09-10 阅读 17 评论 0

摘要:志在巅峰的攀登者,不会陶醉在沿途的某个脚印之中,在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天、每周,都会留下一些脚印,就是这些创作的内容&#

志在巅峰的攀登者,不会陶醉在沿途的某个脚印之中,在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天、每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不妨来瞅瞅码农的轨迹。

android调用activity方法,如果你有兴趣 你可以关注一下公众号 biglead 来获取最新的学习资料。

  • Flutter 从入门 到精通系列文章在这里
  • 当然也必需是要有源码的 在这里了
  • github 有点慢 不妨来看看码云的源码吧
  • 系列学习教程在这里

BaseActivity

BaseActivity 中封装了校验与请求,代码如下

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;import com.example.studyapp.interfac.PermissionInterface;public class BaseActivity extends AppCompatActivity {private Context mContext;/*** 子Activity 权限申请使用的回调*/private PermissionInterface mPermissionInterface;/*** 权限没有通过时 true 显示一个弹框再确认*/private boolean isShowPermissionAlert;private String showPermissionMessage = "权限申请没有通过";private AlertDialog alertDialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mContext = this;}/*** 子 Activity 调用申请权限功能** @param permissionInterface* @return*/protected boolean checkPermisson(PermissionInterface permissionInterface, String permission, int requestCode) {return this.checkPermisson(permissionInterface, permission, requestCode, false);}/*** 子 Activity 调用申请权限功能** @param permissionInterface* @return*/protected boolean checkPermisson(PermissionInterface permissionInterface, String permission, int requestCode, boolean showAlert) {mPermissionInterface = permissionInterface;isShowPermissionAlert = showAlert;//检查是否有权限int checkSelfPermission = ContextCompat.checkSelfPermission(this, permission);if (checkSelfPermission == PackageManager.PERMISSION_GRANTED) {return true;} else {//申请ActivityCompat.requestPermissions(this, new String[]{permission}, requestCode);return false;}}/*** 权限申请的回调** @param requestCode* @param permissions* @param grantResults*/@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (mPermissionInterface != null) {if (permissions.length != 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) {if (isShowPermissionAlert) {//显示弹框showAlertFunction();} else {//没有通过权限mPermissionInterface.noPass(requestCode);}} else {//申请通过mPermissionInterface.onPass(requestCode);}}}private void showAlertFunction() {//创建构建器AlertDialog.Builder builder = new AlertDialog.Builder(this);alertDialog = builder.setTitle("温馨提示").setMessage(showPermissionMessage).setNegativeButton("知道了 暂不使用", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//没有通过权限申请的弹框mPermissionInterface.noPass(0);alertDialog.dismiss();}}).setPositiveButton("去设置中心", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Intent intent = new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);intent.setData(Uri.fromParts("package", mContext.getPackageName(), null));mContext.startActivity(intent);alertDialog.dismiss();}}).create();//显示弹框alertDialog.show();}
}

PermissionInterface

android.intent.action.MAIN,在这里是通过 接口回调来调用 子 Activity 中通过权限申请后的方法功能

public interface PermissionInterface {void onPass(int requestCode);void noPass(int requestCode);
}

子Activity 中的调用

public class PhoneDetailsActivity extends BaseActivity implements View.OnClickListener {private String phone = "1233245325321";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_phone_details);TextView phoneTextView = findViewById(R.id.tv_phone);//设置点击事件phoneTextView.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.tv_phone://检查是否有权限checkPermisson(new PermissionInterface() {@Overridepublic void onPass(int requestCode) {callPhone(phone);}@Overridepublic void noPass(int requestCode) {Toast.makeText(PhoneDetailsActivity.this, "没有同意使用权限", Toast.LENGTH_LONG).show();}}, Manifest.permission.CALL_PHONE, 101,true);break;}}/*** Android 6.0 以上 需要动态申请权限* 直接拨打电话** @param phone*/private void callPhone(String phone) {Intent intent = new Intent();intent.setAction(Intent.ACTION_CALL);Uri data = Uri.parse("tel:" + phone);intent.setData(data);startActivity(intent);}/*** 跳转拨号** @param phone*/private void callDialPhone(String phone) {Intent intent = new Intent();intent.setAction(Intent.ACTION_DIAL);Uri data = Uri.parse("tel:" + phone);intent.setData(data);startActivity(intent);}}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/35088.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息