Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 定期打开和关闭蓝牙_Android_Bluetooth - Fatal编程技术网

Android 定期打开和关闭蓝牙

Android 定期打开和关闭蓝牙,android,bluetooth,Android,Bluetooth,我有一个可以查看手机配对设备的应用程序 我有它,以便蓝牙打开。但当我把它放在等待中时,每次我打开它,它都会灰飞烟灭 我怎么能让它每5分钟打开一分钟,或者类似的。只有当它没有连接到任何东西时才会关闭 任何帮助都会很好。 谢谢 代码 private void turnOnBt() { //Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); //startActivityForResult(intent

我有一个可以查看手机配对设备的应用程序

我有它,以便蓝牙打开。但当我把它放在等待中时,每次我打开它,它都会灰飞烟灭

我怎么能让它每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());
        }
    }
}
成对代码

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
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
第二个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
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

发布日志猫错误

另外,在查看配对设备后,为什么要关闭整个适配器…记住对.enable()和.disable()的调用是在用户界面响应后完成的

在没有任何用户输入的情况下,决不能编程!如果我连接了另一个设备,例如耳机,该怎么办?看更多


我知道如果适配器未启用,您将无法获得配对设备,但仍然

在您的
MainActivitiy::turnOnBt()方法中-这是引发异常的地方,您可以调用
Thread.wait()(预设在第92行)

我不太确定你想用它实现什么,因为在UI线程上调用
wait()
,会(我很确定)让你的应用程序崩溃

调用
Thread.wait()必须在同步块中执行此操作:

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

但正如我所说,这不是你想要的。你把
Thread.wait()
Thread.sleep(…)混在一起了吗?事件,然后在UI线程上调用
Thread.sleep(…)

@ELSheepO Ok,现在发布新错误。另外,还有一个简单的更改:创建一个名为BluetoothAdapter myAdapter=getDefault…bla bla的对象。检查它是否为null,然后从那时起在代码中使用它。第二件事,为硬件事件注册一个接收器。比如BT关机,开机,等等,然后检查你是否得到了这些。请参阅@ELSheepO为什么仍在尝试重置适配器?你知道你正在打破编码规则,你的用户也会得到一个奇怪的和被黑客攻击的用户体验吗@ELSheepO打开适配器不会耗尽电池电量!所以这个借口是无效的!你是否做了索赔背后的测试?我有,这没有意义。GPS耗尽了它,BT不多,每天5%。@ELSheepO你似乎每次都在搜索BT设备,而不是查看已经配对的设备列表。这就是为什么你需要启用BT适配器…所以你总是在寻找车载套件或其他东西…它可能不是你的设备,否则你可以连接到它,然后断开连接,你就会知道用户离开了汽车…仍然请不要使用BT适配器…@ELSheepO,因此错误出现在你活动的onReceive方法上。当你收到一个发现设备的意图时,就会发生这种情况。我正试图让它在关闭蓝牙之前等待。第92行是我的
wait(15000)
。如果我同步的方法,它应该工作是什么你说?