Reputation: 305
I have an app that looks at the paired devices of a phone.
I have it so that the bluetooth turns on. But when I put in the wait it chrashes every time I open it.
How would I have it so that it turns on for a minute every 5 minutes or something like that. And only turns off if it hasn't connected to anything.
Any help would be great. Thanks
code
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();
}
paired code
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
Second 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 com.Test.bluetooth.MainActivity$3@2be07420
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
Upvotes: 0
Views: 1388
Reputation: 1957
In your MainActivitiy::turnOnBt()
method - this is where there the exception is thrown you have a call to Thread.wait();
(presumbly on line 92)
I'm not quite sure what you try to achieve with this as a call to wait()
on the UI thread will (I'm pretty sure) crash your app with an ANR Exception.
To call Thread.wait();
you have to do it in a synchronized block:
synchronized(this) {
try {
Thread.wait();
}
catch(InterruptedException e) {
}
}
But as I said - this is not what you want. Have you mixed up Thread.wait()
with Thread.sleep(...);
? Event then, calling Thread.sleep(...)
on the UI Thread is really not recommended.
Upvotes: 1
Reputation: 2074
Post your logcat error.
Also, why would you turn the entire adapter off after you look at the paired devices...Remember the calls to .enable() and .disable() are to be done after a user interface response!
Never programatically without any user input! What if I have another device connected, like a headset for example? See more here.
I understand that if the adapter is not enabled you cannot get the paired devices, but still!
Upvotes: 1