Android 电话功能开发指南
在 Android 应用开发中,电话功能涉及拨打电话、监听通话状态、拦截呼出电话以及处理来电挂断等核心场景。由于涉及用户隐私和通信费用,相关 API 需要严格的权限声明和运行时授权。
1. 如何使用代码拨打电话
Android 提供了两种主要的拨打电话方式:
- 打开拨号界面:使用
Intent.ACTION_DIAL。用户确认后会显示号码并等待点击呼叫。此方式不需要CALL_PHONE权限。 - 直接拨打电话:使用
Intent.ACTION_CALL。程序直接发起呼叫,无需用户二次确认。此方式必须声明android.permission.CALL_PHONE权限。
代码示例
// 打开拨号界面(无需 CALL_PHONE 权限)
Intent intentDial = new Intent();
intentDial.setAction(Intent.ACTION_DIAL);
intentDial.setData(Uri.parse("tel:10086"));
startActivity(intentDial);
// 直接拨打电话(需 CALL_PHONE 权限)
Intent intentCall = new Intent();
intentCall.setAction(Intent.ACTION_CALL);
intentCall.setData(Uri.parse("tel:10086"));
startActivity(intentCall);
权限配置
在 AndroidManifest.xml 中添加权限:
<uses-permission android:name="android.permission.CALL_PHONE" />
注意:从 Android 6.0 (API 23) 开始,CALL_PHONE 属于危险权限,必须在运行时动态申请并获得用户授权后才能调用,否则会导致 SecurityException。
2. 如何监听电话状态
Android 提供了 TelephonyManager 类来管理电话服务,配合 PhoneStateListener 可以监听三种主要状态:
- 空闲状态 (IDLE):无通话活动。
- 振铃状态 (RINGING):有来电或正在拨出。
- 摘机状态 (OFFHOOK):通话正在进行中。
实现步骤
- 创建继承自
PhoneStateListener的类。 - 重写
onCallStateChanged方法处理状态变化。


