- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试通过 SCO 发送应用程序的所有音频。
我能够成功发送音频,
但是当来电时,我需要断开与 SCO 的连接,这样应用程序的音频就不会干扰通话,
问题是,当我在通话后尝试将音频重新路由到 SCO 时,它不起作用。
这是我用来将音频发送到 SCO 的代码:
public class BluetoothManager {
// For Bluetooth connectvity
private static String TAG = "BluetoothManager";
private static BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
private static AudioManager aM;
/**
* Set the audio manager of the device.
* @param c: The context this method is called from
*/
public static void setAudioManager(Context c) {
aM = (android.media.AudioManager)c.getSystemService(Context.AUDIO_SERVICE);
}
/**
* Check if a Bluetooth headset is connected. If so, route audio to Bluetooth SCO.
*/
private static void initializeAudioMode(Context context) {
BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() {
public void onServiceConnected(int profile, BluetoothProfile proxy) {
if (profile == BluetoothProfile.HEADSET) {
BluetoothHeadset bh = (BluetoothHeadset) proxy;
List<BluetoothDevice> devices = bh.getConnectedDevices();
if (devices.size() > 0) {
enableBluetoothSCO();
}
}
mBluetoothAdapter.closeProfileProxy(profile, proxy);
}
public void onServiceDisconnected(int profile) {}
};
mBluetoothAdapter.getProfileProxy(context, mProfileListener, BluetoothProfile.HEADSET);
}
/**
* Bluetooth Connectvity
* The following methods are associated with enabling/disabling Bluetooth.
* In the future we may want to disable other sources of audio.
*/
private static void enableBluetoothSCO() {
aM.setMode(AudioManager.MODE_IN_CALL);
aM.startBluetoothSco();
aM.setBluetoothScoOn(true);
}
/** Right now, this simply enables Bluetooth */
@SuppressLint("NewApi")
public static boolean enableBluetooth(Context c) {
// If there is an adapter, enable it if not already enabled
if (mBluetoothAdapter != null) {
if (!mBluetoothAdapter.isEnabled()) {
mBluetoothAdapter.enable();
}
setAudioManager(c);
initializeAudioMode(c);
Log.e(TAG, "SCO: " + aM.isBluetoothScoOn());
Log.e(TAG, "A2DP: " + aM.isSpeakerphoneOn());
return true;
} else {
Log.v(TAG, "There is no bluetooth adapter");
return false;
}
}
/** Right now, this simply disables Bluetooth */
public static void disableBluetooth() {
// If there is an adapter, disabled it if not already disabled
if (mBluetoothAdapter != null) {
if (mBluetoothAdapter.isEnabled()) {
mBluetoothAdapter.disable();
}
} else {
Log.v(TAG, "There is no bluetooth adapter");
}
}
public static void restartBluetooth(){
aM.setMode(AudioManager.MODE_IN_CALL);
}
public static void stopBluetooth(){
aM.setMode(AudioManager.MODE_NORMAL);
}
}
当我正确调用 stopBluetooth()
时,应用程序的音频不再发送到耳机,
但是当我调用 restartBluetooth()
时,音频不是按预期从耳机播放的,而是从手机扬声器播放的。
最佳答案
有没有可能是通话结束后SCO链接挂了?如果是这种情况,则还必须在路由音频的同时启动 SCO 链接。
你试过在restartBluetooth()中调用enableBluetoothSCO()
关于android - 来电后蓝牙 SCO 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24104250/
我的一位客户刚刚告诉我,在使用我为他们开发的应用程序时,他们接到来电,但 iPhone 上没有显示警报。相反,调用电话的人听到一条消息,表明用户的服务暂时不可用。 如果我们暂时搁置以下可能性:调用电话
我正在尝试在 Android 上实现 iOS callkit 行为。我收到来自 firebase 的推送通知,我想向用户显示“来电”屏幕。为此,我使用了 android.telecom 包和其他类中的
我使用 WebRTC 制作了一个简单的调用应用程序。我已建立连接,现在可以从一个浏览器调用另一个浏览器。 我仍然无法弄清楚并且在 WebRTC 标准中找不到的一件事是......我如何拒绝通话提议。
我正在使用 Twilio Java API,但我似乎无法构建将调用 Sip 分机的响应。 TwiMLResponse twiml = new TwiMLResponse(); Sip sip = ne
“如何挂断来电(当然是在 Android 中)?” 首先,我知道这个问题已经被问过和回答过好几次了,而回答总是“你不能”。但是如果我们看看市场,我们会得到一些应用程序(所有私有(private)软件,
场景如下: 显示一个 Activity (active)。如果有电话来电,Activity 应该接收到 Intent(将“来电屏幕”发送到后台/从显示屏上隐藏它),并且 Activity 本身对用户保
我用过这个方法How do I get my AVPlayer to play while app is in background?让 AVPlayer 在后台播放,以便用户可以在浏览 safari
我正在编写一个基于闹钟的应用程序,我正在寻找一种持续唤醒用户的方法。理想情况下,我希望电话能够振动、响铃和显示消息。我尝试了几种不同的选择,这是我目前拥有的: 让后台服务启动振动和播放音乐的 Acti
我的对象使用 javascript 对象原型(prototype)。 我定义了以下内容: Game = function(id, userId, tiles){ this._userId =
我正在开发 VOIP 调用应用程序。当来电显示高达 android 5.0 版时,来电显示在锁定屏幕的顶部,但从 6.0 版开始显示为通知。未出现调用屏幕。 在做了一些研发之后,在 setConten
我在 Android 上编写自己的启动器,当我使用此启动器接到 Skype 电话时,我看到来电窗口,但我无法接听电话...之后我什么也做不了,它是封锁所有。使用默认启动器和其他启动器,Skype 可以
现在怎么样了 很多问题都讨论过这个问题,但都没有提供好的解决方案。事情看起来很简单,有了 BroadcastReceiver 之后真的很容易拦截和阻止调用。出现的主要问题是默认的 Android
我正在开发一个应用程序,这个应用程序需要在某些事件发生时向用户提供明确的指示。 到目前为止我唯一能做的就是在通知区域发出通知。但是,我需要提供更明显的通知,类似于来电时电话响铃时的行为。 据我了解,a
不幸的是,Twilio 文档不够清晰,无法回答我的问题,所以我来了。 当我的应用程序在前台/后台运行时,我能够在用户调用时接收 Twilio 传入连接,并且我可以正确处理此问题(在应用程序内显示弹出窗
这可能是个愚蠢的问题,我有点菜鸟。我正在阅读这篇文章:How do I access call log for android? 在代码底部的答案中,他们有这一行: int type = Intege
我是一名优秀的程序员,十分优秀!