Android 如何从通知打开的 activity 发送 message/object 到 activity
Android how to send message/object to an activity from an activity that was opened from a notification
假设我有两个活动:
- MainActivity:显示存储在 SQLiteDB
中的项目列表
- 通知Activity:Activity 用户可以从中向数据库添加项目。
通知Activity 在用户单击通知时打开。接下来,用户向数据库添加一个项目并关闭 NotificationActivity。如何通知我的 MainActivity 添加了一个对象?
什么不起作用:
我不能使用 broadcastreiceiver,因为它在 activity 暂停时未注册,这当然发生在我的 NotificationActivity 打开时。
我无法使用 startActivityForResult
,因为通知Activity 从通知中打开。
我不能使用 MainActivity 它的 onResume
因为我不会在每次恢复 MainActivity 时更新列表。
那么我如何从我的 NotificationActivity 发送一个 message/object 到我的 MainActivity 并从一个通知打开?
如果您要实现的目标是使用从通知 Activity 添加的新项目更新 Main Activity 中的 UI,并且您正在使用 Cursor Loaders 和 Content Provider你的活动检查 Cursor.setnotificationuri() 的概念
What is cursor.setNotificationUri() used for?
如果您在 ContentProvider 的查询 api 中启用 Cursor.setnotificationuri(),Content Provider 中更新、插入或删除期间的任何更改都会立即反映到 UI。
查看您与@Hulk 之间的评论交流,您有以下选择:
使用一个BroadcastReceiver
。你说你需要取消注册接收者以防止"Activity has leaked IntentReceiver"。是的,您应该取消注册您的接收器,但您不需要在 onPause()
中执行此操作。当你的 Activity
被摧毁时,你可以在 onDestroy()
中进行。当您的 Activity
还活着时,BroadcastReceiver
可以保持活跃收听。这里没有内存泄漏。
使用 static
(全局)变量,当 NotificationActivity
对数据进行更改时,该变量设置为 true
。在 MainActivity.onResume()
中,您可以检查此变量并相应地更新 UI。
假设我有两个活动:
- MainActivity:显示存储在 SQLiteDB 中的项目列表
- 通知Activity:Activity 用户可以从中向数据库添加项目。
通知Activity 在用户单击通知时打开。接下来,用户向数据库添加一个项目并关闭 NotificationActivity。如何通知我的 MainActivity 添加了一个对象?
什么不起作用:
我不能使用 broadcastreiceiver,因为它在 activity 暂停时未注册,这当然发生在我的 NotificationActivity 打开时。
我无法使用
startActivityForResult
,因为通知Activity 从通知中打开。我不能使用 MainActivity 它的
onResume
因为我不会在每次恢复 MainActivity 时更新列表。
那么我如何从我的 NotificationActivity 发送一个 message/object 到我的 MainActivity 并从一个通知打开?
如果您要实现的目标是使用从通知 Activity 添加的新项目更新 Main Activity 中的 UI,并且您正在使用 Cursor Loaders 和 Content Provider你的活动检查 Cursor.setnotificationuri() 的概念 What is cursor.setNotificationUri() used for?
如果您在 ContentProvider 的查询 api 中启用 Cursor.setnotificationuri(),Content Provider 中更新、插入或删除期间的任何更改都会立即反映到 UI。
查看您与@Hulk 之间的评论交流,您有以下选择:
使用一个
BroadcastReceiver
。你说你需要取消注册接收者以防止"Activity has leaked IntentReceiver"。是的,您应该取消注册您的接收器,但您不需要在onPause()
中执行此操作。当你的Activity
被摧毁时,你可以在onDestroy()
中进行。当您的Activity
还活着时,BroadcastReceiver
可以保持活跃收听。这里没有内存泄漏。使用
static
(全局)变量,当NotificationActivity
对数据进行更改时,该变量设置为true
。在MainActivity.onResume()
中,您可以检查此变量并相应地更新 UI。