NfcAndPaymentFragmentController: fix crash

06-29 23:09:26.799  5606  5606 E AndroidRuntime: Caused by: java.lang.IllegalArgumentException: Receiver not registered: com.android.settings.connecteddevice.NfcAndPaymentFragmentController$1@95014d9
06-29 23:09:26.799  5606  5606 E AndroidRuntime: 	at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:1695)
06-29 23:09:26.799  5606  5606 E AndroidRuntime: 	at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:2025)
06-29 23:09:26.799  5606  5606 E AndroidRuntime: 	at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:843)
06-29 23:09:26.799  5606  5606 E AndroidRuntime: 	at com.android.settings.connecteddevice.NfcAndPaymentFragmentController.onStop(NfcAndPaymentFragmentController.java:106)
06-29 23:09:26.799  5606  5606 E AndroidRuntime: 	at com.android.settingslib.core.lifecycle.Lifecycle.onStop(Lifecycle.java:169)
06-29 23:09:26.799  5606  5606 E AndroidRuntime: 	at com.android.settingslib.core.lifecycle.Lifecycle.-$$Nest$monStop(Lifecycle.java:0)
06-29 23:09:26.799  5606  5606 E AndroidRuntime: 	at com.android.settingslib.core.lifecycle.Lifecycle$LifecycleProxy.onLifecycleEvent(Lifecycle.java:231)

Signed-off-by: Dmitrii <bankersenator@gmail.com>
This commit is contained in:
Dmitrii
2025-06-30 06:45:57 +00:00
committed by Joey
parent fd81964ba3
commit 97644bc45b

View File

@@ -44,6 +44,8 @@ public class NfcAndPaymentFragmentController extends BasePreferenceController
private final IntentFilter mIntentFilter;
private Preference mPreference;
private boolean mIsReceiverRegistered = false;
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -99,20 +101,18 @@ public class NfcAndPaymentFragmentController extends BasePreferenceController
@Override
public void onStop() {
if (!isNfcAvailable()) {
return;
if (mIsReceiverRegistered) {
mContext.unregisterReceiver(mReceiver);
mIsReceiverRegistered = false;
}
mContext.unregisterReceiver(mReceiver);
}
@Override
public void onResume() {
if (!isNfcAvailable()) {
return;
if (isNfcAvailable() && !mIsReceiverRegistered) {
mContext.registerReceiver(mReceiver, mIntentFilter);
mIsReceiverRegistered = true;
}
mContext.registerReceiver(mReceiver, mIntentFilter);
}
private boolean isNfcAvailable() {