如何在使用蓝牙服务时摆脱"Are you missing a call to unregisterReceiver()?"错误?



我得到以下错误:

12-02 13:35:55.990 10977-10977/com.example.btpdemo76 E/ActivityThread:Activity com.zkc.pinter.Activity.MainActivity泄露了最初在此处注册的IntentReceiver com.zkc.helper.printer.BlueToothService$1@4179571。是否缺少对unregisterReceiver((的调用?android.app.IntentReceiverLeaked:Activity com.zkc.pinter.Activity.MainActivity泄露了最初在此处注册的IntentReceiver com.zkc.helper.printer.BlueToothService$1@4179571。是否缺少对unregisterReceiver((的调用?在android.app.LoadedApk$ReceiverDispatcher.(LoadedApk.java:1351(在android.app.LoadedApk.getReceiverDispatcher上(LoadedApk.java:1132(在android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1421(在android.app.ContextImpl.registerReceiver(ContextImpl.java:1394(在android.app.ContextImpl.registerReceiver(ContextImpl.java:1382(位于android.content.ContextWrapper.registerReceiver(ContextWrapper.java:609(网址:com.zkc.helper.printer.BlueToothService.ScanDevice(BlueToothServices.java:87(网址:com.zkc.helper.printer.bt.BtService$2.run(BtService.java:86(

这是我的代码

公共无效扫描(({

if (!mBTService.IsOpen()) {
mBTService.OpenDevice();
return;
}
if (mBTService.getState() == STATE_SCANING)
return;
new Thread() {
public void run() {
mBTService.ScanDevice();  
}
}.start();
}




public void ScanDevice() {
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
context.registerReceiver(mReceiver,  filter);  //showing error here
filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
context.registerReceiver(mReceiver, filter);
if (adapter.isDiscovering()) {
adapter.cancelDiscovery();
}
setState(PrinterClass.STATE_SCANING);
// Request discover from BluetoothAdapter
adapter.startDiscovery();
}

动态添加接收器时,请记住在onPause()方法中注销同一接收器:

@Override
protected void onPause() {
unregisterReceiver(mReceiver);
super.onPause();
}

注意:不要将上述代码放在onStop()方法中,因为:

在内存不足的情况下,可能永远不会调用此方法系统没有足够的内存来保持活动的进程在调用其onPause((方法后运行。

相关内容

最新更新