2013-02-21 5 views
0

У меня есть приложение, которое смотрит на сопряженные устройства телефона.периодически включается и выключается bluetooth

У меня есть так, что bluetooth включается. Но когда я включаю в себя ожидание, он прерывается каждый раз, когда я его открываю.

Как бы это сделать, чтобы оно включалось в течение минуты каждые 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

+0

добавил выход logcat. – ELSheepO

+0

Итак, я видел проблемы с ожиданием, я добавил 'notify()' в код, и теперь он не сбой. но теперь он не отключает Bluetooth. – ELSheepO

1

В вашем методе MainActivitiy::turnOnBt() - это там, где исключение брошено у вас есть вызов Thread.wait(); (presumbly на линии 92)

Я не совсем уверен, что вы пытаетесь достичь с помощью этого как вызов wait() в потоке пользовательского интерфейса будет (я уверен,) сбой вашего приложения с ANR Exception.

Для вызова Thread.wait(); вы должны сделать это в синхронизированный блок:

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

Но, как я уже сказал - это не то, что вы хотите. Вы перепутали Thread.wait() с Thread.sleep(...);? Затем событие, вызвав Thread.sleep(...) в теме UI, - really not recommended.

+0

Я пытаюсь заставить его ждать, пока он не выключит Bluetooth , Линия 92 - это то, где у меня есть 'wait (15000)'. Если я синхронизирую метод, он должен работать, что вы говорите? – ELSheepO

Смежные вопросы