Android蓝牙:java.io.IOException:服务发现失败

Varun Kumar

我正在尝试开发一个Android应用程序,它将图像从一台设备传输到另一台设备。然后,收到的图像将显示在我的应用程序内的ImageView上。为了完成我的任务,我想发送一个位图的字节数组。我能够在imageview上获得第一张图像。但是,一旦我单击按钮发送另一张图像,应用程序将无法发送位图。它向我显示了一个异常“ java.io.IOException:服务发现失败。” 要成功发送任何图像,我需要在接收/远程设备上重新启动我的应用程序。任何人都可以提出亩问题的解决方案。该logcat也包括在下面。

建立连接的代码:

        private class StartConnectionThread extends Thread{
    private final BluetoothSocket bluetoothSocket;
    private final BluetoothDevice bluetoothDevice;
    public StartConnectionThread(BluetoothDevice device){
        BluetoothSocket tempBluetoothSocket=null;
        bluetoothDevice=device;
        try
        {
            System.out.println(uuid);
            tempBluetoothSocket=device.createRfcommSocketToServiceRecord(uuid);
        }
        catch(IOException ioException)
        {

        }
        bluetoothSocket=tempBluetoothSocket;
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        bluetoothAdapter.cancelDiscovery();
        try
        {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            bluetoothSocket.connect();

        }
        catch(IOException ioException)
        {
            System.out.println("bluetoothSocketInThread failed");
            try
            {
                bluetoothSocket.close();
            }
            catch(IOException cancelIOException)
            {

            }
            return;
        }
        manageConnectedSocket(bluetoothSocket);
    }
    public void cancel()
    {
        try
        {
            bluetoothSocket.close();
        }
        catch(IOException ioException)
        {

        }
    }
}

接受连接的代码:

        private class AcceptConnectionThread extends Thread
{
    private final BluetoothServerSocket bluetoothServerSocket;
    public AcceptConnectionThread() {
        // TODO Auto-generated constructor stub
        System.out.println("constructor");
        BluetoothServerSocket tempBluetoothServerSocket=null;
        try
        {
            tempBluetoothServerSocket=bluetoothAdapter.listenUsingRfcommWithServiceRecord("My Souvenirs", uuid);
        }
        catch(IOException ioException)
        {
        }
        bluetoothServerSocket=tempBluetoothServerSocket;
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        BluetoothSocket bluetoothSocket=null;
        while(true)
        {
            try
            {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println(bluetoothServerSocket);
                if(bluetoothServerSocket!=null)
                {
                    bluetoothSocket=bluetoothServerSocket.accept();
                }
                System.out.println("accept");
            }
            catch(IOException ioException){
                break;
            }
            if(bluetoothSocket!=null)
            {
                manageConnectedSocket(bluetoothSocket);
                try {
                    bluetoothServerSocket.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                break;
            }
        }
    }
    public void cancel()
    {
        try{
            bluetoothServerSocket.close();
        }
        catch(IOException ioException){

        }
    }

}

管理连接的代码:

        private class ManageConnectedDevicesThread extends Thread
{
    private final BluetoothSocket connectedBluetoothSocket;
    public ManageConnectedDevicesThread(BluetoothSocket socket) {
        // TODO Auto-generated constructor stub
        connectedBluetoothSocket=socket;
        InputStream tempInputStream=null;
        OutputStream tempOutputStream=null;
        try
        {
            tempInputStream=socket.getInputStream();
            tempOutputStream=socket.getOutputStream();
        }
        catch(IOException ioException)
        {

        }
        inputStream=tempInputStream;
        outputStream=tempOutputStream;
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
                    byte[] buffer=new byte[1024*8];
        int bytes;
        while(true)
        {
            try
            {
                bytes=inputStream.read(buffer);
                handler.obtainMessage(MESSAGE_READ,bytes,-1,buffer).sendToTarget();
                System.out.println("handler");
            }
            catch(IOException ioException)
            {
                System.out.println("for handler:" +ioException);
                break;
            }
        }
    }
    public void write(byte[] bytes)
    {
        try
        {
            outputStream.write(bytes);
        }
        catch(IOException ioException){
            System.out.println("exception in wrie tatement of managing connections");
        }

    }


    public void close()
    {
        try {
            connectedBluetoothSocket.close();
        } catch (IOException e) {
            // TODO: handle exception
        }
    }
}

重置连接的代码:

            void resetConnection()  
    {
        if(inputStream!=null)
        {
            try {
                inputStream.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                        }
        }
        if(outputStream!=null)
        {
            try {
                outputStream.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(startConnectionThread!=null)
        {
            System.out.println("start wala active tha");
            startConnectionThread.cancel();
        }
        if(acceptConnectionThread!=null)    
        {
            System.out.println("accept wala active tha");
            acceptConnectionThread.cancel();
        }
        if(manageConnectedDevicesThread!=null)
        {
            System.out.println("manage wala active tha");
            manageConnectedDevicesThread.close();
        }
    }

}

处理程序的代码如下所示:

    private final Handler handler=new Handler(){
public void handleMessage(Message msg) {
    switch (msg.what) {
    case MESSAGE_READ:
        System.out.println("MESSAGE_READ");
        byte[] readBuf = (byte[]) msg.obj;
        // construct a string from the valid bytes in the buffer
        String readMessage = new String(readBuf, 0, msg.arg1);
        byte[] b=readMessage.getBytes();
        Bitmap bitmap1=BitmapFactory.decodeByteArray(readBuf, 0, readBuf.length);
        imageView.setImageBitmap(bitmap1);
        break;
    }

};

日志显示以下内容:

    01-25 14:49:31.800: D/dalvikvm(9451): Debugger has detached; object registry had 1 entries
    01-25 14:49:38.380: V/BluetoothSocket.cpp(9451): initSocketNative
    01-25 14:49:38.380: V/BluetoothSocket.cpp(9451): ...fd 40 created (RFCOMM, lm = 26)
    01-25 14:49:38.380: V/BluetoothSocket.cpp(9451): initSocketFromFdNative
    01-25 14:49:40.420: D/BluetoothUtils(9451): isSocketAllowedBySecurityPolicy start : device null
    01-25 14:49:41.680: I/System.out(9451): bluetoothSocketInThread failed
    01-25 14:49:41.680: V/BluetoothSocket.cpp(9451): abortNative
    01-25 14:49:41.680: V/BluetoothSocket.cpp(9451): ...asocket_abort(40) complete
    01-25 14:49:41.680: V/BluetoothSocket.cpp(9451): destroyNative
    01-25 14:49:41.680: V/BluetoothSocket.cpp(9451): ...asocket_destroy(40) complete

提前致谢。

传呼人

也许您可以尝试添加thread.sleep一秒钟?这个讨论

“我能够解决问题的唯一方法是在关闭连接之前先添加一个thread.sleep一秒钟。”

另请参见dan在此线程上的两个连续注释

“只有在分开对findBT(); openBT();的调用之后,我才能使它运行。

否则,mmSocket.connect(); 引发异常,“服务发现失败”

但是,如果我将findBT()放在onCreate()中,并且只使用openBT()按钮;它工作正常。

或者,如果我再按下一个按钮,则每个按钮都可以正常工作。

有建议吗?”

第二条评论的摘录:

Set pairedDevices = mBluetoothAdapter.getBondedDevices();
mmDevice = mBluetoothAdapter.getRemoteDevice(“00:06:66:46:5A:91″);
if (pairedDevices.contains(mmDevice))
{
statusText.setText(“Bluetooth Device Found, address: ” + mmDevice.getAddress() );
Log.d(“ArduinoBT”, “BT is paired”);
}

我在其中输入了蓝牙设备的地址。原始代码找到该设备并返回正确的地址,但mmSocket.connect(); 生成异常“ java.io.IOException:服务发现失败”

有什么建议吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android蓝牙:java.io.IOException:服务发现失败

来自分类Dev

Android蓝牙:java.io.IOException:传输端点未连接

来自分类Dev

蓝牙连接失败“ java.io.IOException:读取失败,套接字可能关闭或超时,读取ret:-1”

来自分类Dev

蓝牙连接失败。java.io.IOException:读取失败,套接字可能关闭或超时,读取ret:-1

来自分类Dev

蓝牙连接失败。java.io.IOException:读取失败,套接字可能关闭或超时,读取ret:-1

来自分类Dev

失败,发生异常java.io.IOException:org.apache.avro.AvroTypeException:发现的时间很长,期望在配置单元中进行合并

来自分类Dev

错误:任务':app:transformClassesWithInstantRunSlicerForDebug'的执行失败。> java.io.IOException:

来自分类Dev

Android canvas始终保存java.io.IOException:打开失败:ENOENT(无此类文件或目录)

来自分类Dev

错误:java.io.IOException:在Android设备上构建失败,任务为'processDebugResources'

来自分类Dev

Android MediaPlayer java.io.IOException:准备失败。:status = 0x1

来自分类Dev

Android canvas始终保存java.io.IOException:打开失败:ENOENT(无此类文件或目录)

来自分类Dev

java.io.IOException java

来自分类常见问题

错误:任务':app:processDebugResources'的执行失败。> java.io.IOException:无法在Android Studio中删除文件夹“”

来自分类Dev

java.io.IOException:HTTP请求失败,HTTP状态:500(ksoap2)

来自分类Dev

Spark在具有java.io.IOException的大型混洗作业上失败:文件系统关闭

来自分类Dev

为什么sbt失败并出现java.io.IOException:启动时拒绝权限?

来自分类Dev

Jetty WebSocketClientSelectorManager-连接失败java.io.IOException:无法初始化SSL

来自分类Dev

Tomcat JSP页面未编译(java.io.IOException:tmpFile.renameTo(classFile)失败)

来自分类Dev

mp4prasser异常java.io.IOException:打开失败:EACCES(权限被拒绝)

来自分类Dev

java.io.IOException:从密钥表登录 [email protected] 失败

来自分类Dev

每收到几次对Web服务的调用:com.android.volley.NoConnectionError:java.io.IOException:主机名未验证

来自分类Dev

从我的Java代码调用.net Web服务时获取java.io.IoException

来自分类Dev

Android GCM InstanceId.getToken()-> java.io.IOException:超时

来自分类Dev

Android中出现奇怪的“ java.io.IOException:EOF”错误

来自分类Dev

Android:java.io.IOException:主机名未验证

来自分类Dev

Android:java.io.IOException:主机名未验证

来自分类Dev

NoSuchMethodError:使用Froyo版本的Google Play服务时出现java.io.IOException。<init>异常

来自分类Dev

java.io.IOException:服务器返回的HTTP响应代码:URL的400

来自分类Dev

java.io.IOException:服务器返回的HTTP响应代码:502

Related 相关文章

  1. 1

    Android蓝牙:java.io.IOException:服务发现失败

  2. 2

    Android蓝牙:java.io.IOException:传输端点未连接

  3. 3

    蓝牙连接失败“ java.io.IOException:读取失败,套接字可能关闭或超时,读取ret:-1”

  4. 4

    蓝牙连接失败。java.io.IOException:读取失败,套接字可能关闭或超时,读取ret:-1

  5. 5

    蓝牙连接失败。java.io.IOException:读取失败,套接字可能关闭或超时,读取ret:-1

  6. 6

    失败,发生异常java.io.IOException:org.apache.avro.AvroTypeException:发现的时间很长,期望在配置单元中进行合并

  7. 7

    错误:任务':app:transformClassesWithInstantRunSlicerForDebug'的执行失败。> java.io.IOException:

  8. 8

    Android canvas始终保存java.io.IOException:打开失败:ENOENT(无此类文件或目录)

  9. 9

    错误:java.io.IOException:在Android设备上构建失败,任务为'processDebugResources'

  10. 10

    Android MediaPlayer java.io.IOException:准备失败。:status = 0x1

  11. 11

    Android canvas始终保存java.io.IOException:打开失败:ENOENT(无此类文件或目录)

  12. 12

    java.io.IOException java

  13. 13

    错误:任务':app:processDebugResources'的执行失败。> java.io.IOException:无法在Android Studio中删除文件夹“”

  14. 14

    java.io.IOException:HTTP请求失败,HTTP状态:500(ksoap2)

  15. 15

    Spark在具有java.io.IOException的大型混洗作业上失败:文件系统关闭

  16. 16

    为什么sbt失败并出现java.io.IOException:启动时拒绝权限?

  17. 17

    Jetty WebSocketClientSelectorManager-连接失败java.io.IOException:无法初始化SSL

  18. 18

    Tomcat JSP页面未编译(java.io.IOException:tmpFile.renameTo(classFile)失败)

  19. 19

    mp4prasser异常java.io.IOException:打开失败:EACCES(权限被拒绝)

  20. 20

    java.io.IOException:从密钥表登录 [email protected] 失败

  21. 21

    每收到几次对Web服务的调用:com.android.volley.NoConnectionError:java.io.IOException:主机名未验证

  22. 22

    从我的Java代码调用.net Web服务时获取java.io.IoException

  23. 23

    Android GCM InstanceId.getToken()-> java.io.IOException:超时

  24. 24

    Android中出现奇怪的“ java.io.IOException:EOF”错误

  25. 25

    Android:java.io.IOException:主机名未验证

  26. 26

    Android:java.io.IOException:主机名未验证

  27. 27

    NoSuchMethodError:使用Froyo版本的Google Play服务时出现java.io.IOException。<init>异常

  28. 28

    java.io.IOException:服务器返回的HTTP响应代码:URL的400

  29. 29

    java.io.IOException:服务器返回的HTTP响应代码:502

热门标签

归档