gpt4 book ai didi

android - 在 Android Lollipop 上关闭蓝牙时应用程序崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:47 24 4
gpt4 key购买 nike

我有一个 BroadcastReceiver,它检测蓝牙状态的变化并相应地执行操作 - 当蓝牙打开时,它会打开信标的监控服务。当蓝牙关闭时,它会停止监控服务。 Nexus 5上出现这种情况,接收端如下

public class BluetoothReceiver extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {

// If Bluetooth is switched on
if (intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1)
== BluetoothAdapter.STATE_ON) {

//Start the beacon detection service
if (EmployeeSignupManager.getEmployeeUUIDFromSharedPreference(context) != null) {

// Register Receiver
new AttendanceManager().startBroadCastReceiverForBeaconDetection(context);

// Start Service
SO.startBeaconServices(true);
}

}


// If Bluetooth is switched off

else if (intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1)
== BluetoothAdapter.STATE_OFF) {

//Stop the beacon detection service
if (EmployeeSignupManager.getEmployeeUUIDFromSharedPreference(context) != null) {

// Unregister Receiver
new AttendanceManager().stopBroadCastReceiverForBeaconDetection(context);

// Stop Service
SO.startBeaconServices(false);
}
}
}
}

以下是堆栈跟踪:

java.lang.IllegalStateException: BT Adapter is not turned ON
at android.bluetooth.le.BluetoothLeUtils.checkAdapterStateOn(BluetoothLeUtils.java:136)
at android.bluetooth.le.BluetoothLeScanner.stopScan(BluetoothLeScanner.java:144)
at org.altbeacon.beacon.service.scanner.CycledLeScannerForLollipop.deferScanIfNeeded(CycledLeScannerForLollipop.java:148)
at org.altbeacon.beacon.service.scanner.CycledLeScanner.scanLeDevice(CycledLeScanner.java:163)
at org.altbeacon.beacon.service.scanner.CycledLeScannerForLollipop$1.run(CycledLeScannerForLollipop.java:139)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

我写了这个:

 beaconManager.bind(this) 

其中 beaconManager 是 BeaconManager(org.altbeacon.beacon) 类的一个对象。在 onServiceConnected 回调中,我从数据库中获取信标信息并开始监控过程:

Region region = new Region(beacon.getBeaconName(), Identifier.parse(beacon.getProximityUUID()), Identifier.parse(String.valueOf(beacon.getMajor())), Identifier.parse(String.valueOf(beacon.getMinor())));
if (isStartingSevices) {
try {
System.out.println("Test notification Started monitoring beacon for region" + beacon.getBeaconName());
if(isBluetoothEnabled()) {
beaconManager.startMonitoringBeaconsInRegion(region);
}
} catch (RemoteException e) {
}
} else {
try {
System.out.println("Test notification stopped monitoring beacon for region" + beacon.getBeaconName());
beaconManager.stopMonitoringBeaconsInRegion(region);
} catch (RemoteException e) {
}
}

最佳答案

您可以像这样在停止扫描之前检查蓝牙适配器状态:

if (scanner != null && mLeScannerCallback != null && 
mBluetoothAdapter.getState() == BluetoothAdapter.STATE_ON)

关于android - 在 Android Lollipop 上关闭蓝牙时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28085104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com