蓝牙无法在发现失败后启动发现

时间:2017-04-24 06:24:40

标签: java android bluetooth rfcomm

我使用[a-z]+createInsecureRfcommSocketToServiceRecord创建了一个非常简单的应用程序,以了解如何使用Android蓝牙API。

我用两个设备测试了应用程序,A和B,设备A是Lollipop和LG,设备B是KitKat和LG。

当设备B在调用listenUsingInsecureRfcommWithServiceRecord时找不到指定的UUID时,服务发现失败'被扔了。然而,在一次“服务发现失败”之后,'被抛出,connect()稍后调用将抛出无法启动服务发现'的立即即可。 (使用调试器检查)

通过终止并重新启动应用程序无法修复此问题,并且需要重新启动才能修复。然而,似乎其他使用不安全RFCOMM的蓝牙应用程序也可以工作。 (使用'蓝牙终端' Play商店应用程序进行测试)

注意:设备A没有此类行为。实际上,它甚至没有抛出“服务发现失败”。异常和抛出“套接字未打开”#39;或类似的东西。

这是我的源代码:

connect()

这里是服务发现失败的日志'例外:

package com.example.bluetoothtest;

// Imports here

//Device A MAC: XX:XX:XX:XX:XX:XX
//Device B MAC: YY:YY:YY:YY:YY:YY

public class MainActivity extends AppCompatActivity {
    UUID myUUID = UUID.fromString("ceceb700-28a8-11e7-9598-0800200c9a66"); //Random generated using a website
    BluetoothAdapter bl;
    BluetoothDevice remote;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bl = BluetoothAdapter.getDefaultAdapter();
        remote = bl.getRemoteDevice("XX:XX:XX:XX:XX:XX");
    }

    public void onConnectAsServerClick(View v) {
        System.out.println("server");
        try {
            BluetoothServerSocket server_sock = bl.listenUsingInsecureRfcommWithServiceRecord("bluetoothtest", myUUID);
            System.out.println("accepting");
            BluetoothSocket sock = server_sock.accept();
            System.out.println("accepted");
            System.out.println(Integer.toString(sock.getInputStream().read()));
            server_sock.close();
            sock.close();
        } catch(IOException e) {
            e.printStackTrace();
        }
    }

    public void onConnectAsClientClick(View v) {
        System.out.println("client");
        try {
            BluetoothSocket sock = remote.createInsecureRfcommSocketToServiceRecord(myUUID);
            System.out.println("connecting");
            sock.connect(); // Exceptions thrown here
            System.out.println("connected");
            sock.getOutputStream().write(20);
            sock.close();
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}

此处无法启动服务发现':

I/System.out: client
I/BluetoothSocket.cpp: Setting Master socket option
I/System.out: connecting
W/System.err: java.io.IOException: Service discovery failed
W/System.err:     at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:504)
W/System.err:     at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:252)
W/System.err:     at ml.minary.example.MainActivity.onConnectAsClientClick(MainActivity.java:61)
W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err:     at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err:     at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
W/System.err:     at android.view.View.performClick(View.java:4336)
W/System.err:     at android.view.View$PerformClick.run(View.java:17587)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:725)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:92)
W/System.err:     at android.os.Looper.loop(Looper.java:137)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5230)
W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err:     at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:564)
W/System.err:     at dalvik.system.NativeStart.main(Native Method)

0 个答案:

没有答案