本文已参与「新人创作礼」活动,一起开启掘金创作之路
最近有个需求 就是在安卓app里快速拨打紧急页面
实现这个需求也不难 首先先在AndroidManifest.xml里开启权限
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.light">
<uses-permission android:name="android.permission.CALL_PHONE" />
</manifest>
然后在调用拨打电话的时候检查一下是否开启权限
其中重要的是这个@TargetApi告诉lint就当此处是在强调的24版本之上运行的。低于此24版本不做报警。若高于此api可以继续检查
然后创建一个字符数组来存储想要检查的权限 这里我们只需要一个Manifest.permission.CALL_PHONE就可以了 如果sdk版本大于23 则检查是否授权 如果返回的值不是PERMISSION_GRANTED代表的0(为啥是0 看源码) 则再次申请权限(ActivityCompat.requestPermissions(MainActivity.this,permissonsData,3);)
这是源码
/**
* Permission check result: this is returned by {@link #checkPermission}
* if the permission has been granted to the given package.
*/
public static final int PERMISSION_GRANTED = 0;
@TargetApi(Build.VERSION_CODES.N)
private void call() {
String[] permissonsData =new String[]{Manifest.permission.CALL_PHONE};
if (Build.VERSION.SDK_INT>=23){
int permissonCheck=ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION);//检查是否已经授权
if(permissonCheck != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(MainActivity.this,permissonsData,3);
}
}
}
获取了权限之后 做好了前期准备工作
就可以开始正式快速拨打电话
@SuppressLint("MissingPermission")
public void phoneBt() {
String phone = "19973690568";
Log.v("phone",phone);
Intent intent=new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+phone));
startActivity(intent);
}
这里的代码较简单 首先创建一个电话的字符串变量 为了方便我就直接赋值给电话了 其实你可以用SQLite或者sharedpreferences存储电话号码和修改电话号码 感兴趣的可以看我之前的文章 有详细介绍 在这里就不想说了 重复炒冷饭没意思
然后就直接用Intent用来启动拨打电话服务 有两个参数
1.第一个参数为启动的服务名(ACTION_CALL)
2.第二个参数为uri为把电话号码转换为资源标识符{?}
这样就可以完成了快速拨打电话了