问题描述
我正在创建一个具有广播接收器的应用程序,该广播接收器通过清单进行注册。
它从其他应用程序接收意图并显示通知。
通知中有一个pendingIntent
,它会在点击时启动MainActivity
,并使用该意图将一些值(例如发件人应用程序的packageName
)传递给它。
现在,如果用户未使用通知打开MainActivity
,则我正在使用notificationmanager.getActiveNotifications()
方法来获取活动的通知,但无法从中获取意图。
到目前为止我已经尝试过的事情:
- 我不想使用动态广播接收器,因为我想在后台接收意图。
- 我尝试在
sharedPreference
中创建通知时存储数据,以便以后如果有任何活动通知时可以进入MainActivity
。不确定这是否是最好的方法。 - 使用服务的
onBind
方法在MainActivity
中获取数据,但是无法从广播接收器启动后台服务,因此后台服务仅在MainActivity
运行时起作用。
是否有任何方法可以通知MainActivity
有关广播接收器的数据,即使MainActivity
没有运行,也可以在MainActivity
启动后立即获取数据。
任何帮助将不胜感激。
解决方法
在我看来,使用NotificationManager.getActiveNotifications()
获取存储在通知中的信息不是一个好主意。
您已经在问题中陈述了为什么这是一个坏主意的一些原因。同样,如果用户在打开您的应用之前删除了通知,那么您将丢失所有信息。
执行此操作的最佳方法是在广播接收器中将数据存储在设备内存中(存储数据的方式取决于数据本身,它可以是sharedPreferences,数据库,文件...)。
在MainActivity
中,您可以从内存中检索数据并进行处理。