Я разрабатываю плагин Flutter, который дает пользователю возможность прослушивать состояние телефона, даже когда приложение находится в фоновом режиме/закрыто. Проблема здесь в том, что я хочу иметь возможность включать/отключать эту службу программно, сейчас у меня на моем AndroidManifest.xml
следующее receiver
:
<receiver android:name=".CallerPhoneServiceReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
И это работает отлично, мой код dart
вызывается в фоновом режиме без проблем, теперь я хочу отключить этот receiver
всякий раз, когда пользователь решает, что он больше не хочет прослушивать эти события, погуглив немного я нашел registerReceiver
и unregisterReceiver
, которые, по-видимому, делают то, что мне нужно, но похоже, что unregisterReceiver
работает только тогда, когда вызов с тем же объектом был передан registerReceiver
в качестве аргумента, в основном он работает до тех пор, пока приложение остается открытым, но как я могу отменить регистрацию, если пользователь решит закрыть приложение и вернуться, чтобы деактивировать события? Даже когда пользователь деактивируется сам по себе, я хочу иметь возможность вызывать этот метод в случае выхода из системы.
Я видел несколько примеров, в которых говорится, что нужно использовать sharedPreferences
и сохранить, является ли служба ON/OFF
, а затем решить, вызывать или нет код dart
, но моя служба все равно останется активной, ничего не делая, кроме активной , и это может потреблять заряд батареи, это не очень хорошее решение, что мне делать?