我想发现bluetooth范围内的设备,列表并在点击时与它们配对.当我点击我要配对的设备名称时,我使用了以下代码,但它只关闭了应用程序.
我想知道我的代码中的错误或任何其他方式来做我需要的.
package com.marakana;
import java.util.Set;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
public class BluetoothDemo extends Activity {
// Debugging
private static final String TAG = "DeviceListActivity";
private static final boolean D = true;
// Return Intent extra
public static String EXTRA_DEVICE_ADDRESS = "device_address";
// Member fields
private …Run Code Online (Sandbox Code Playgroud) 在连接蓝牙设备下面这两种方式有什么区别:
1)
UUID uuid = UUID.fromString(Values.SPP_UUID); //Standard SerialPortService ID
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
Run Code Online (Sandbox Code Playgroud)
2)
Method m = mmDevice.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
mmSocket = (BluetoothSocket) m.invoke(mmDevice, 1);
Run Code Online (Sandbox Code Playgroud)
我发现第一种方法不能一直工作,有时它会起作用,但是在关闭蓝牙设备后,它将无法再次工作.第二种方式总是运作良好.我知道它只是打开一个与蓝牙通信的频道,但我不知道如何在不使用uuid的情况下连接到蓝牙设备呢?
是否可以使用带有@hide注释的方法而无需重新编译sdk?
注意:我知道我不应该使用这种方法等.
有谁知道,如何在Android和LEGO-Mindstorm-NXT之间建立蓝牙连接?两个NXT之间的连接工作正常.但另一种Connection类型并不那么容易.我正在使用LeJOS Firmware 0.85和Android SDK Tools(2.2 Froyo).
我有一个应用程序通过RFCOMM通过蓝牙与自定义设备通信.通信代码基于BluetoothTalk示例项目.它在Galaxy S3,Galaxy S2,Galaxy Note和Nexus 7之前运行没有任何问题.
最近,Nexus 7升级到Android 4.2,从那时起,问题发生如下:
当您第一次使用该应用程序设置连接时,意味着该设备刚刚启动且应用程序刚刚启动,没问题,您可以正常获取数据.
然后,如果停止通信并尝试重新启动,则通信将失败并显示错误"java.io.IOException:bt socket closed,read return:-1".从那时起,无论您尝试重新连接多少次,它总是会失败.
让它再次工作的唯一方法是,如果你重新启动自定义设备和应用程序,然后尝试连接,通信变得正常.但是,一旦你停止并重新开始通信,它就会继续失败.
我借用了Android 4.2的Nexus 4,问题仍然存在.
这真的很烦人,因为我们设备的主要价值在于依赖于蓝牙RFCOMM应用程序.我在Android 4.2中仔细检查了关于BT的文档,并没有看到任何重大变化.我对我这方面的代码非常有信心,因为它适用于任何未运行4.2的Android设备
任何提示或建议将不胜感激.该设备需要在12月初进行演示,我们真的希望尽快解决这个问题.
编辑:现在4.2.1已经发布,问题仍未解决.我们是否至少可以得到一些关于它是否正在运行并将很快得到修复的确认?
我正在开发一个使用蓝牙连接到设备并发送/接收数据的应用程序.我正在使用Nexus One手机进行所有测试.
我从来没有能够建立从手机到任何设备的SPP(串行端口)连接.不过,我已经能够从一个设备(我的笔记本电脑)连接到使用Mac相当于腻子我的手机(唯一的例外是"蓝牙文件传输"从Marketplace应用似乎工作,但我不认为使用RFCOM/SPP ......).
我一直在LogCat日志中看到这条消息:
ERROR/BluetoothService.cpp(78): stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session)
Run Code Online (Sandbox Code Playgroud)
以及这些:
java.io.IOException: Operation Canceled
java.io.IOException: Software caused connection abort
Run Code Online (Sandbox Code Playgroud)
我尝试使用UUID"00001101-0000-1000-8000-00805F9B34FB",我也试过使用:
Method m = device.getClass().getMethod("createRfcommSocket", new Class[] { int.class });
sock = (BluetoothSocket) m.invoke(device, Integer.valueOf(1));
Run Code Online (Sandbox Code Playgroud)
方法而不是device.createRfcommSocketToServiceRecord(UUID);- 没有运气.
我正在使用BluetoothChat示例和该代码的变体来完成我的所有测试......
解决方案或建议会很棒...或者甚至是我可以在手机上运行的一些测试代码的更好/更简单的例子,或者是我可以在我的计算机上运行以帮助调试的python脚本?
谢谢!我希望这不是Android操作系统的错误,但如果是,我希望找到一个解决方法.
编辑:我还应该注意,大多数设备在蓝牙设置中显示为"已配对但未连接".
编辑2:解决方案似乎只是禁用任何蓝牙监听.有关更多信息,请参阅我的回答帖
作为Android编程的初学者,我有一个问题:我想从连接到微处理器的蓝牙/串行模块接收数据(两个字节).这些数据应该打印到屏幕上,并且每秒更新一次.我已经发现了这个:如何防止Android蓝牙RFCOMM连接在.connect()之后立即死亡? 哪个应该是工作代码,但什么也没发生.我将mac地址更改为00:11:12:05:03:67,这应该与我的蓝牙模块相对应.
我是否完全朝着错误的方向前进?我想我想要的是非常基本的:只需通过蓝牙进行简单的单向数据传输.
任何想法都将非常感激.
最好的祝愿,
凯文