unregister broadcast receiver on service destroyed
Bug: 146939060
Test: Manual
Merged-In: Ib0f9befb889d5e04d159192ccb3ecec9bf311bcd
Change-Id: Ib0f9befb889d5e04d159192ccb3ecec9bf311bcd
(cherry picked from commit 74b654e768748c10de40f112aa4a6505ef8f55f9)
diff --git a/src/com/android/cellbroadcastservice/CellBroadcastHandler.java b/src/com/android/cellbroadcastservice/CellBroadcastHandler.java
index df3d5a6..8781c80 100644
--- a/src/com/android/cellbroadcastservice/CellBroadcastHandler.java
+++ b/src/com/android/cellbroadcastservice/CellBroadcastHandler.java
@@ -114,6 +114,25 @@
*/
private final Map<Integer, Integer> mServiceCategoryCrossRATMap;
+ private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ switch (intent.getAction()) {
+ case Intent.ACTION_AIRPLANE_MODE_CHANGED:
+ boolean airplaneModeOn = intent.getBooleanExtra("state", false);
+ if (airplaneModeOn) {
+ mLastAirplaneModeTime = System.currentTimeMillis();
+ log("Airplane mode on.");
+ }
+ break;
+ case ACTION_DUPLICATE_DETECTION:
+ mEnableDuplicateDetection = intent.getBooleanExtra(EXTRA_ENABLE,
+ true);
+ break;
+ }
+ }
+ };
+
private CellBroadcastHandler(Context context) {
this("CellBroadcastHandler", context, Looper.myLooper());
}
@@ -188,26 +207,13 @@
if (IS_DEBUGGABLE) {
intentFilter.addAction(ACTION_DUPLICATE_DETECTION);
}
- mContext.registerReceiver(
- new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- switch (intent.getAction()) {
- case Intent.ACTION_AIRPLANE_MODE_CHANGED:
- boolean airplaneModeOn = intent.getBooleanExtra("state", false);
- if (airplaneModeOn) {
- mLastAirplaneModeTime = System.currentTimeMillis();
- log("Airplane mode on.");
- }
- break;
- case ACTION_DUPLICATE_DETECTION:
- mEnableDuplicateDetection = intent.getBooleanExtra(EXTRA_ENABLE,
- true);
- break;
- }
- }
- }, intentFilter);
+ mContext.registerReceiver(mReceiver, intentFilter);
+ }
+
+ public void cleanup() {
+ if (DBG) log("CellBroadcastHandler cleanup");
+ mContext.unregisterReceiver(mReceiver);
}
/**
diff --git a/src/com/android/cellbroadcastservice/DefaultCellBroadcastService.java b/src/com/android/cellbroadcastservice/DefaultCellBroadcastService.java
index f530dff..70d23ae 100644
--- a/src/com/android/cellbroadcastservice/DefaultCellBroadcastService.java
+++ b/src/com/android/cellbroadcastservice/DefaultCellBroadcastService.java
@@ -58,6 +58,13 @@
}
@Override
+ public void onDestroy() {
+ mGsmCellBroadcastHandler.cleanup();
+ mCdmaCellBroadcastHandler.cleanup();
+ super.onDestroy();
+ }
+
+ @Override
public void onGsmCellBroadcastSms(int slotIndex, byte[] message) {
Log.d(TAG, "onGsmCellBroadcastSms received message on slotId=" + slotIndex);
mGsmCellBroadcastHandler.onGsmCellBroadcastSms(slotIndex, message);