0

我正在编写一个安卓应用程序。在此应用程序中,用户可以键入文本,然后我将其发送到通知以显示给用户。我将文本作为字符串存储在 sharedpreferences 中。通知由警报管理触发,如果手机关闭,警报管理也会关闭。当手机重新启动时,我的 StartUpReceiver 会捕获“BOOT_COMPLETED”广播并发送通知。问题是,通知不能使用 sharedpreferences 字符串来显示用户文本输入。

我发现,应用程序必须在前台或后台运行才能使用共享首选项。所以我现在在想,如果我的 StartUpReceiver 打开,它只是他,而不是我的应用程序调整,对吧?所以不能在 StartUpReceiver 上使用 sharedpreferences 吗?或者有什么你知道的方法吗?

我的另一个解决方案(但我还没有练习)是启动一个服务(互联网说我可以在那里使用共享首选项)并让服务发送通知。

但在较新的 Android 中,该服务必须是前台服务,我真的不喜欢这种解决方案。因此,如果您有任何其他解决方案,我将不胜感激。

最后,对不起我的英语不好。但我希望你明白我想说什么。:-)

非常感谢!

4

1 回答 1

0

我不确定为什么您不能在 Receiver 中使用 SharedPreferences。这是我在我的应用程序中的操作方式。

  1. AndroidManifest.xml我这样注册我的 BroadcastReceiver 中:
<receiver
        android:name=".data.receiver.AlarmBootReceiver"
        android:enabled="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
</receiver>
  1. 我创建了一个名为的类AlarmBootReceiver,如下所示:
class AlarmBootReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == "android.intent.action.BOOT_COMPLETED") {
            // You can obtain SharedPreferences here (you have a Context as a parameter)
        }
    }
}
  1. 现在,在该onReceive()方法中,您可以通过传递您需要的任何数据来注册通知Intent
于 2021-09-30T09:20:21.500 回答