2013-02-21 139 views
0

我有一款应用程序,可以查看手机的配对设备。定期打开和关闭蓝牙

我拥有它,以便蓝牙打开。但是当我等待时,每当我打开它时,它就会崩溃。

我该怎么做才能让它每5分钟打开一分钟或类似的东西。只有在没有连接任何东西的情况下才会关闭。

任何帮助将是伟大的。 由于

代码

private void turnOnBt() { 
    //Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
    //startActivityForResult(intent, 1); 
    BluetoothAdapter.getDefaultAdapter().enable(); 
    try { 
     wait(15000); 
     notify(); 
     BluetoothAdapter.getDefaultAdapter().disable(); 
     wait(60000); 
     notify(); 
     //BluetoothAdapter.getDefaultAdapter().enable(); 
     //Toast.makeText(getApplicationContext(), "Bluetooth restarted", 0).show(); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

配对代码

private void getPairedDevices() { 
    // TODO Auto-generated method stub 
    devicesArray = btAdapter.getBondedDevices(); 
    if(devicesArray.size()>0){ 
     for(BluetoothDevice device:devicesArray){ 
      pairedDevices.add(device.getName()); 
     } 
    } 
} 

logcat的

02-21 13:10:18.559: D/TextLayoutCache(25101): Using debug level: 0 - Debug Enabled: 0 
02-21 13:10:18.589: D/libEGL(25101): loaded /system/lib/egl/libGLES_android.so 
02-21 13:10:18.609: D/libEGL(25101): loaded /system/lib/egl/libEGL_adreno200.so 
02-21 13:10:18.639: D/libEGL(25101): loaded /system/lib/egl/libGLESv1_CM_adreno200.so 
02-21 13:10:18.639: D/libEGL(25101): loaded /system/lib/egl/libGLESv2_adreno200.so 
02-21 13:10:19.329: D/OpenGLRenderer(25101): Enabling debug mode 0 
02-21 13:13:07.819: D/TextLayoutCache(25306): Using debug level: 0 - Debug Enabled: 0 
02-21 13:13:07.839: D/libEGL(25306): loaded /system/lib/egl/libGLES_android.so 
02-21 13:13:07.849: D/libEGL(25306): loaded /system/lib/egl/libEGL_adreno200.so 
02-21 13:13:07.869: D/libEGL(25306): loaded /system/lib/egl/libGLESv1_CM_adreno200.so 
02-21 13:13:07.869: D/libEGL(25306): loaded /system/lib/egl/libGLESv2_adreno200.so 
02-21 13:13:07.969: D/OpenGLRenderer(25306): Enabling debug mode 0 
02-21 13:16:42.419: D/AndroidRuntime(25750): Shutting down VM 
02-21 13:16:42.419: W/dalvikvm(25750): threadid=1: thread exiting with uncaught exception (group=0x2b542210) 
02-21 13:16:42.439: E/AndroidRuntime(25750): FATAL EXCEPTION: main 
02-21 13:16:42.439: E/AndroidRuntime(25750): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Test.bluetooth/com.Test.bluetooth.MainActivity}: java.lang.IllegalMonitorStateException: object not locked by thread before wait() 
02-21 13:16:42.439: E/AndroidRuntime(25750): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at android.app.ActivityThread.access$600(ActivityThread.java:127) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at android.os.Looper.loop(Looper.java:137) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at android.app.ActivityThread.main(ActivityThread.java:4441) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at java.lang.reflect.Method.invokeNative(Native Method) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at java.lang.reflect.Method.invoke(Method.java:511) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at dalvik.system.NativeStart.main(Native Method) 
02-21 13:16:42.439: E/AndroidRuntime(25750): Caused by: java.lang.IllegalMonitorStateException: object not locked by thread before wait() 
02-21 13:16:42.439: E/AndroidRuntime(25750): at java.lang.Object.wait(Native Method) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at java.lang.Object.wait(Object.java:401) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at com.Test.bluetooth.MainActivity.turnOnBt(MainActivity.java:92) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at com.Test.bluetooth.MainActivity.onCreate(MainActivity.java:76) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at android.app.Activity.performCreate(Activity.java:4465) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
02-21 13:16:42.439: E/AndroidRuntime(25750): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931) 
02-21 13:16:42.439: E/AndroidRuntime(25750): ... 11 more 

二logcat的

02-21 13:47:30.079: D/AndroidRuntime(27230): Shutting down VM 
02-21 13:47:30.079: W/dalvikvm(27230): threadid=1: thread exiting with uncaught exception (group=0x2b542210) 
02-21 13:47:30.089: E/AndroidRuntime(27230): FATAL EXCEPTION: main 
02-21 13:47:30.089: E/AndroidRuntime(27230): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.bluetooth.device.action.FOUND flg=0x10 (has extras) } in [email protected] 
02-21 13:47:30.089: E/AndroidRuntime(27230): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:737) 
02-21 13:47:30.089: E/AndroidRuntime(27230): at android.os.Handler.handleCallback(Handler.java:605) 
02-21 13:47:30.089: E/AndroidRuntime(27230): at android.os.Handler.dispatchMessage(Handler.java:92) 
02-21 13:47:30.089: E/AndroidRuntime(27230): at android.os.Looper.loop(Looper.java:137) 
02-21 13:47:30.089: E/AndroidRuntime(27230): at android.app.ActivityThread.main(ActivityThread.java:4441) 
02-21 13:47:30.089: E/AndroidRuntime(27230): at java.lang.reflect.Method.invokeNative(Native Method) 
02-21 13:47:30.089: E/AndroidRuntime(27230): at java.lang.reflect.Method.invoke(Method.java:511) 
02-21 13:47:30.089: E/AndroidRuntime(27230): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
02-21 13:47:30.089: E/AndroidRuntime(27230): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
02-21 13:47:30.089: E/AndroidRuntime(27230): at dalvik.system.NativeStart.main(Native Method) 
02-21 13:47:30.089: E/AndroidRuntime(27230): Caused by: java.lang.NullPointerException 
02-21 13:47:30.089: E/AndroidRuntime(27230): at com.Test.bluetooth.MainActivity$3.onReceive(MainActivity.java:137) 
02-21 13:47:30.089: E/AndroidRuntime(27230): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:728) 
02-21 13:47:30.089: E/AndroidRuntime(27230): ... 9 more 

回答

1

安置自己的logcat的错误。

此外,为什么在查看配对设备之后关闭整个适配器...记住要在用户界面响应后执行.enable()和.disable()调用!

绝不以编程方式没有任何用户输入!如果我连接了另一台设备(如耳机),该怎么办?查看更多here

据我所知,如果适配器没有启用,你不能得到配对的设备,但仍然!

+0

当我回到我的笔记本电脑时,我会将它们发布。如果没有可用的配对设备并在5分钟内再次检查,我希望它关闭。我用用户输入来做,因为我不需要每次都问。 – ELSheepO 2013-02-21 12:20:58

+0

添加了logcat输出。 – ELSheepO 2013-02-21 13:13:24

+0

好吧,所以我已经看到了等待的问题,我已经添加了'notify()'代码,现在它不会崩溃。但它现在不会关闭蓝牙。 – ELSheepO 2013-02-21 13:24:49

1

在你MainActivitiy::turnOnBt()方法 - 这是那里发生异常时,你必须Thread.wait();(presumbly上线92)

我不太清楚你试着用这个来实现,以一个叫什么通话在UI线程上的wait()(我敢肯定)会使用ANR Exception崩溃你的应用程序。

要调用Thread.wait();你必须做一个synchronized块:

synchronized(this) { 
    try { 
     Thread.wait(); 
    } 
    catch(InterruptedException e) { 
    } 
} 

但正如我所说 - 这是你想没有什么。你有没有把Thread.wait()Thread.sleep(...);混淆?然后,在UI线程上调用Thread.sleep(...)线程为really not recommended

+0

我试图让它等待,然后关闭蓝牙。 92线是我有'wait(15000)'的地方。如果我同步它应该工作的方法是你说什么? – ELSheepO 2013-02-21 13:34:40