一周前我从这里的人那里得到了帮助,但是我的代码似乎仍然有问题。我正在运行android 2.0,所以我不能使用这些方法来获取ui,而是需要反射地调用这些方法。下面是我的代码
public ConnectThread(BluetoothDevice device, boolean secure) {
Log.d(TAG,"here5");
mmDevice = device;
BluetoothSocket tmp = null;
mSocketType = secure ? "Secure" : "Insecure";
Log.d(TAG,"here6");
// Get a BluetoothSocket for a connection with the
// given BluetoothDevice
ParcelUuid[] uuids = servicesFromDevice( mmDevice );
Log.d( Integer.toString( uuids.length ),"here7");
try {
if (secure) {
tmp = device.createRfcommSocketToServiceRecord(
uuids[0].getUuid());
} else {
tmp = device.createInsecureRfcommSocketToServiceRecord(
uuids[0].getUuid());
}
我在上面最后一行代码中收到一个nullpointerexception。我想是在说我的uuid[0].getuuid()调用。ServicesFromDevice功能如下…
public ParcelUuid[] servicesFromDevice(BluetoothDevice device) {
try {
Class cl = Class.forName("android.bluetooth.BluetoothDevice");
Class[] par = {};
Method method = cl.getMethod("getUuids", par);
Object[] args = {};
ParcelUuid[] retval = (ParcelUuid[]) method.invoke(device, args);
return retval;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
这是我的logcat
06-19 13:11:07.002: D/MainMenu(13137): onActivityResult -1
06-19 13:11:07.002: D/BluetoothService(13137): connect to: 00:06:66:00:A2:11
06-19 13:11:07.002: D/BluetoothService(13137): here1
06-19 13:11:07.002: D/BluetoothService(13137): here2
06-19 13:11:07.002: D/BluetoothService(13137): here5
06-19 13:11:07.010: D/BluetoothService(13137): here6
06-19 13:11:07.017: D/AndroidRuntime(13137): Shutting down VM
06-19 13:11:07.017: W/dalvikvm(13137): threadid=1: thread exiting with uncaught exception (group=0x40015560)
06-19 13:11:07.025: E/AndroidRuntime(13137): FATAL EXCEPTION: main
06-19 13:11:07.025: E/AndroidRuntime(13137): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {my.eti.commander/my.eti.commander.MainMenu}: java.lang.NullPointerException
06-19 13:11:07.025: E/AndroidRuntime(13137): at android.app.ActivityThread.deliverResults(ActivityThread.java:2532)
06-19 13:11:07.025: E/AndroidRuntime(13137): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2574)
06-19 13:11:07.025: E/AndroidRuntime(13137): at android.app.ActivityThread.access$2000(ActivityThread.java:117)
06-19 13:11:07.025: E/AndroidRuntime(13137): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961)
06-19 13:11:07.025: E/AndroidRuntime(13137): at android.os.Handler.dispatchMessage(Handler.java:99)
06-19 13:11:07.025: E/AndroidRuntime(13137): at android.os.Looper.loop(Looper.java:130)
06-19 13:11:07.025: E/AndroidRuntime(13137): at android.app.ActivityThread.main(ActivityThread.java:3683)
06-19 13:11:07.025: E/AndroidRuntime(13137): at java.lang.reflect.Method.invokeNative(Native Method)
06-19 13:11:07.025: E/AndroidRuntime(13137): at java.lang.reflect.Method.invoke(Method.java:507)
06-19 13:11:07.025: E/AndroidRuntime(13137): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-19 13:11:07.025: E/AndroidRuntime(13137): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-19 13:11:07.025: E/AndroidRuntime(13137): at dalvik.system.NativeStart.main(Native Method)
06-19 13:11:07.025: E/AndroidRuntime(13137): Caused by: java.lang.NullPointerException
06-19 13:11:07.025: E/AndroidRuntime(13137): at my.eti.commander.BluetoothService$ConnectThread.<init>(BluetoothService.java:409)
06-19 13:11:07.025: E/AndroidRuntime(13137): at my.eti.commander.BluetoothService.connect(BluetoothService.java:180)
06-19 13:11:07.025: E/AndroidRuntime(13137): at my.eti.commander.MainMenu.onActivityResult(MainMenu.java:238)
06-19 13:11:07.025: E/AndroidRuntime(13137): at android.app.Activity.dispatchActivityResult(Activity.java:3908)
06-19 13:11:07.025: E/AndroidRuntime(13137): at android.app.ActivityThread.deliverResults(ActivityThread.java:2528)
06-19 13:11:07.025: E/AndroidRuntime(13137): ... 11 more
最佳答案
来自@devunwired在上面的评论部分……
您是否尝试过使用许多嵌入式设备使用的common SPP ID
,而不是尝试查询设备?
您可能只是运气好,有一个使用此服务ID的嵌入式芯片:
UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")
将我的
UUID
设置为此服务ID对我有效。