【问题标题】:Android File sharing via BluetoothAndroid 通过蓝牙共享文件
【发布时间】:2012-06-11 09:02:33
【问题描述】:

我需要在蓝牙上列出所有可用设备并将任何文件从 android 设备共享到选定设备。我尝试使用下面的代码

 private void sharefile(String deviceAddress,String filePath){
        File f =  new File(filePath);
        BluetoothAdapter objBluetoothAdapter = BluetoothAdapter
                        .getDefaultAdapter();

                BluetoothDevice device = objBluetoothAdapter
                        .getRemoteDevice(deviceAddress);
                Log.v("Device", "" + device.getName());

                final UUID uuid = UUID
                        .fromString("00001101-0000-1000-8000-00805F9B34FB");

                try {
                    byte[] buffer = new byte[(int) f.length()];
                    FileInputStream fis = new FileInputStream(f);
                    BufferedInputStream bis = new BufferedInputStream(fis);
                    bis.read(buffer, 0, (int) f.length());

                    BluetoothSocket socket = device
                            .createRfcommSocketToServiceRecord(uuid);

                    OutputStream os = socket.getOutputStream();
                    os.write(buffer, 0, buffer.length);
                    os.flush();
                    os.close();
                    socket.close();   
                } catch (SecurityException e) {
                    e.printStackTrace();
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

    }

执行上述代码时,Logcat 上显示 Transport endpoint not connected 消息。

06-11 18:26:49.960: W/System.err(9812): java.io.IOException: 传输端点未连接 06-11 18:26:49.960: W/System.err(9812): at android.bluetooth.BluetoothSocket.writeNative(Native Method) 06-11 18:26:49.960: W/System.err(9812): 在 android.bluetooth.BluetoothSocket.write(BluetoothSocket.java:346) 06-11 18:26:49.960: W/System.err(9812): 在 android.bluetooth.BluetoothOutputStream.write(BluetoothOutputStream.java:85) 06-11 18:26:49.960: W/System.err(9812): 在 com.cit.bt.ShareMessageActivity.connectDevice(ShareMessageActivity.java:138) 06-11 18:26:49.960: W/System.err(9812): 在 com.cit.bt.ShareMessageActivity.shareFile(ShareMessageActivity.java:83) 06-11 18:26:49.960: W/System.err(9812): 在 com.cit.bt.ShareMessageActivity.onListItemClick(ShareMessageActivity.java:73) 06-11 18:26:49.960: W/System.err(9812): 在 android.app.ListActivity$2.onItemClick(ListActivity.java:319) 06-11 18:26:49.960: W/System.err(9812): 在 android.widget.AdapterView.performItemClick(AdapterView.java:284) 06-11 18:26:49.960: W/System.err(9812): 在 android.widget.ListView.performItemClick(ListView.java:3736) 06-11 18:26:49.960: W/System.err(9812): 在 android.widget.AbsListView$PerformClick.run(AbsListView.java:1974) 06-11 18:26:49.960: W/System.err(9812): 在 android.os.Handler.handleCallback(Handler.java:587) 06-11 18:26:49.960: W/System.err(9812): 在 android.os.Handler.dispatchMessage(Handler.java:92) 06-11 18:26:49.960: W/System.err(9812): 在 android.os.Looper.loop(Looper.java:130) 06-11 18:26:49.960: W/System.err(9812): 在 android.app.ActivityThread.main(ActivityThread.java:3687) 06-11 18:26:49.960: W/System.err(9812): 在 java.lang.reflect.Method.invokeNative(Native Method) 06-11 18:26:49.960: W/System.err(9812): 在 java.lang.reflect.Method.invoke(Method.java:507) 06-11 18:26:49.960: W/System.err(9812): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 06-11 18:26:49.960: W/System.err(9812): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 06-11 18:26:49.960: W/System.err(9812): at dalvik.system.NativeStart.main(Native Method)

还尝试使用以下替代代码连接设备,它连接设备但无法传输文件。

BluetoothDevice hxm = BluetoothAdapter.getDefaultAdapter()
                .getRemoteDevice(deviceAddress);
        Method m;

            m = hxm.getClass().getMethod("createRfcommSocket",
                    new Class[] { int.class });
            BluetoothSocket socket = (BluetoothSocket) m.invoke(hxm,
                    Integer.valueOf(1));
            socket.connect();

我也在 android manifest 中提供了所需的权限,但连接失败。 任何人都可以帮我解决这个问题。

谁能告诉我安卓市场蓝牙文件传输背后的逻辑。

谢谢!

【问题讨论】:

    标签: android


    【解决方案1】:

    那个蓝牙 HMX 设备不会是心率监测器吧? 无论哪种方式,我们都发布了一个很好的示例(源于 Google 蓝牙聊天示例)。它比他们的示例要精简一些,希望对您有所帮助。

    http://ww2.cs.fsu.edu/~sposaro/mobile/resources/BeatConnect.zip

    【讨论】:

    • 感谢您的回答...我不希望将应用程序安装在客户端-服务器模块等两种设备上。你能给我提供样本来检测附近的蓝牙设备并共享文件吗?没有客户端-服务器模块。就像安卓市场的蓝牙文件传输一样。
    • 你的蓝牙设备和安卓设备配对了吗?
    • 是的。对不起,我不记得一切是如何发生的。我知道我提供的代码与蓝牙心率监测设备相连。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    相关资源
    最近更新 更多