版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huangliniqng/article/details/83536774
欢迎关注技术公众号,微信号搜索ColorfulCode 代码男人
分享技术文章,投稿分享,不限技术种类,不限技术深度,让更多人因为分享而受益。
动态权限框架使用的Acp,封装拨打电话两种常用模式,代码如下:
public class CallPhoneUtils {
private static Context mContext;
private static volatile CallPhoneUtils callPhone;
private CallPhoneUtils() {
}
public static CallPhoneUtils getInstance(Context context) {
mContext = context;
if (callPhone == null) {
synchronized (CallPhoneUtils.class) {
if (callPhone == null) {
callPhone = new CallPhoneUtils();
}
}
}
return callPhone;
}
/**
* 跳转到拨号页面 用户手动点击拨打
*
* @param phoneNum
*/
public void diallPhone(final String phoneNum) {
if (!TextUtils.isEmpty(phoneNum)) {
Acp.getInstance(mContext).request(new AcpOptions.Builder().setPermissions(Manifest.permission.CALL_PHONE)
.setDeniedMessage("拨打电话权限已关闭,如需开启,请点击\"立即开启\"")
.setDeniedSettingBtn("立即开启")
.setDeniedCloseBtn("关闭")
.setRationalBtn("确定")
.setRationalMessage("使用此功能需要拨打电话权限!")
.build(),
new AcpListener() {
@Override
public void onGranted() {
startCall(phoneNum);
}
@Override
public void onDenied(List<String> permissions) {
}
});
} else {
ToastUtil.shortShow(mContext.getString(R.string.haomaweikong));
}
}
/**
* 拨打电话直接拨打 不跳转拨号界面
*
* @param phoneNum
*/
public void callPhone(final String phoneNum) {
if (!TextUtils.isEmpty(phoneNum)) {
Acp.getInstance(mContext).request(new AcpOptions.Builder().setPermissions(Manifest.permission.CALL_PHONE)
.setDeniedMessage("拨打电话权限已关闭,如需开启,请点击\"立即开启\"")
.setDeniedSettingBtn("立即开启")
.setDeniedCloseBtn("关闭")
.setRationalBtn("确定")
.setRationalMessage("使用此功能需要拨打电话权限!")
.build(),
new AcpListener() {
@Override
public void onGranted() {
startCall(phoneNum);
}
@Override
public void onDenied(List<String> permissions) {
}
});
}
}
/**
* 开启拨打电话
*
* @param phoneNumber
*/
public void startCall(String phoneNumber) {
Intent intent = new Intent(Intent.ACTION_DIAL);
Uri data = Uri.parse("tel:" + phoneNumber);
intent.setData(data);
mContext.startActivity(intent);
}