2012-06-19 42 views
3

我在一週前收到某人的幫助,但似乎仍然存在與我的代碼有關的問題。我運行的是Android 2.0,所以我不能使用這些方法來獲取UI,而是需要反射性地調用這些方法。以下是我的代碼如何找到適當的UUID?

  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。我假設它正在談論我的uuids [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 
+1

add ur logcat here – MAC

+1

查看您的代碼是否正在進入servicesFromDevice中的catch塊並記錄正在拋出的異常。這可能有幫助。 –

+0

我剛剛做到了,它不會進入catch塊。 – JuiCe

回答

0

從@Devunwired在上面的註釋部分......

您是否嘗試過使用common SPP ID很多嵌入式設備使用,而不是試圖查詢設備?

你可能只是運氣了,並有一個使用該服務ID芯片內嵌一個:

UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB") 

設置我UUID這項服務ID爲我工作。