我的应用程序正在调用电话:
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + number));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClassName("com.android.phone", "com.android.phone.OutgoingCallBroadcaster");
startActivity(intent);
一切正常,通话开始。
对于真正的耳机,没问题,通话在耳机上开始,但对于“类似耳机”的设备,例如智能 watch (其行为类似于蓝牙耳机,可以接管通话),通话开始于电话,用户必须按"Headset" button在通话屏幕上手动移动至智能 watch 上。 但是,我希望手机始终通过耳机自动调用电话。 或者,如果在通话开始后(1-2 秒内)切换耳机模式,如果无法通过耳机立即开始,也可以。
有人有什么想法吗?
** 更新 **
在调用广播接收器中,我尝试过(当然具有所有必要的权限):
AudioManager audioManager;
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_CALL);
-
audioManager.setSpeakerphoneOn(false)
-> 工作,在通话期间关闭扬声器(如果已打开) -
audioManager.setSpeakerphoneOn(true)
-> 工作,在通话期间打开扬声器(如果它已关闭) -
audioManager.setBluetoothScoOn(false)
-> 工作,在通话期间关闭 BT 耳机(如果它已打开) -
audioManager.setBluetoothScoOn(true)
-> 不起作用,在通话过程中无法打开蓝牙耳机(如果耳机已关闭)
我在 Android AudioManager::startBluetoothSco 文档中找到了这个:
想要与蓝牙 SCO 耳机发送和接收音频的应用程序可以使用此方法,而 phone is not in call
。
奇怪...
谢谢。
最佳答案
尝试使用调用开始时的 Broadcase Receiver 发送广播并将调用切换到耳机模式。
在广播接收器中使用以下操作。
用于拨出电话 - android.intent.action.NEW_OUTGOING_CALL
用于来电 - android.intent.action.PHONE_STATE 在您可以使用不同的状态,如“电话响铃”,“电话接听”等,类似这样您可以检查条件并根据需要在广播接收器的接收器方法中执行适当的代码。
用于将调用转移到蓝牙:
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (telephonyManager != null) {
telephonyManager.listen(phoneStateListener,
PhoneStateListener.LISTEN_CALL_STATE);
}
audioManager.setBluetoothScoOn(true);
audioManager.startBluetoothSco();
关于android - 在 Android 上调用电话时自动激活蓝牙耳机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27344731/