无法通过蓝牙SCO连接在Android

时间:2017-10-10 01:06:46

标签: android bluetooth hci hfp bluetooth-sco

所以我目前正在开发一个实现HFP配置文件的android服务,以便以后使用gui,我能够成功轻松地实现RFCOMM部分,其中发送AT命令如ATA(接受呼叫),但我坚持接受应用程序上的音频SCO连接。所以基本上我正在测试Iphone AG角色和运行我的应用程序的Android平板电脑HF角色,打开SCO连接,我试过调用AudioMAnager.startBluetoothSco();没有任何运气,甚至使用ndk在C中制作蓝牙SCO套接字服务器,它监听连接。但实际的问题是Iphone似乎没有尝试连接sco套接字,所以我从Android平板电脑转储了流量,并看到当Iphone请求SCO连接时,android hci自动响应原因拒绝:连接被拒绝由于资源有限(0x0d),无论我做什么,也许我错过了什么?有任何想法吗?谢谢。忘记提及两个设备都使用os设置应用程序配对,并通过从ios的原生设置应用程序连接到Android平板电脑建立连接。

AudioHandler.java

public class AudioHandler implements Runnable{
static
{
    System.loadLibrary("libsco");
}

@Override
public void run()
{
    AudioManager amanager = (AudioManager) Common.APPCONTEXT.getSystemService(Context.AUDIO_SERVICE);

    amanager.setMode(AudioManager.MODE_IN_COMMUNICATION);
    amanager.startBluetoothSco();
    amanager.setBluetoothScoOn(true);


    if(amanager.isBluetoothScoOn())
    {
        int status= this.SCOINIT();
        Log.d("SCO","SCOFinished");
    }


    /*while(Common.isCallActive)
    {
        play(stream.readbytes());
    }
        this.SCOCLOSE();
        amanager.stopBSCO();
    */



}

private native int SCOINIT();}

libsco.c

void init() {
struct sockaddr_sco addr = {0}, remoteadress = {0};

int SCOServer, SCOClient;


SCOServer = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO);

if (SCOServer < 0) {
    __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, "SCO socket create failed.");
    print("SCO socket create failed.");
}

addr.sco_family = AF_BLUETOOTH;
bacpy(&addr.sco_bdaddr, BDADDR_ANY);

if (bind(SCOServer, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
    print("failed to bind sco.");

}

if (listen(SCOServer, 1)) {
    print("Listening Failed!!");
} else {
    print("Listening for SCO connection.");

}

socklen_t addrlength = sizeof(remoteadress);

SCOClient = accept(SCOServer, (struct sockaddr *) &remoteadress, &addrlength);


if (SCOClient < 0) {
    print("Accept Failed!!");
    close(SCOClient);

} else {
    print("Conected.\n");
    close(SCOClient);
}


close(SCOServer);

}

一切都运行没有错误,我可以看到&#34; LIstening for SCO Connection&#34;行,但它永远不会接受因为android hci在任何事情都可以完成之前拒绝连接... screenshot from wireshark

0 个答案:

没有答案