本章节记录如何构建蓝牙电话功能。
注意蓝牙应用必须是 System App和系统Dialer唯一性
主要是继承并实现InCallService类接收处理蓝牙来电状态。
通过 mTelecomManager 接口拨打电话
通过 Call 控制当前通话操作
添加蓝牙电话相关权限:
AndroidManifest.xml :
继承并实现android.telecom.InCallService来听通话状态。
该接口可以获取当前电话的对象,通过call对象获取号码、状态或者处理三方通话逻辑。
public class InCallServiceImpl extends InCallService {
private TelecomManager mTelecomManager;
@Override
public void onCreate() {
super.onCreate();
//获取 TelecomManager
mTelecomManager =getApplicationContext().getSystemService(TelecomManager.class);
}
@Override
public void onCallAdded(Call telecomCall) {
super.onCallAdded(telecomCall);
//当有新电话添加时,注册监听当前电话状态变化(多个来电都会触发该函数)
telecomCall.registerCallback(mCallListener);
}
@Override
public void onCallRemoved(Call telecomCall) {
//当电话结束时,注销当前电话状态变化监听
telecomCall.unregisterCallback(mCallListener);
super.onCallRemoved(telecomCall);
}
private final Call.Callback mCallListener = new Call.Callback() {
@Override
public void onStateChanged(Call call, int state) {
//通话状态发生变化(如拨号、通话中、挂断等等)
//可以根据对象call的不同判断对应的通话状态(三方通话)
}
};
}
在 AndroidManifest.xml 里面声明 InCallService,这样 Framework 层的 TelecomService 能
够找到对应的 InCallService。
确保android.telecom.InCallService全局唯一;不了可能获取不到通话状态。