Android相当于iOS的UILocalNotification?

时间:2014-04-08 17:31:16

标签: android ios uilocalnotification

我希望在我的Android应用程序中使用本地通知,并想知道Android是否有像iOS UILocalNotification这样的东西?

我喜欢UILocalNotification允许我如何安排"一个或多个未来日期的本地通知,无论电话是醒着还是睡着,都会发生火灾(如常规推送通知)。

在我与AlarmManager陷入混乱之前,我想知道Android是否有一种干净的方式来实现这一目标。

编辑:什么是UILocalNotification

UILocalNotification的实例表示应用程序可以安排在特定日期和时间向其用户呈现的通知。操作系统负责在适当的时间发送通知;应用程序不必为此而运行。虽然本地通知类似于远程通知,因为它们用于显示警报,播放声音和标记应用程序图标,但它们在本地编写和传送,不需要与远程服务器连接。

1 个答案:

答案 0 :(得分:1)

  • 基于时间的触发器

考虑到基于时间的触发要求,AlarmManager似乎是合适的解决方案(可以使用专门的培训here)。您应该注意使用它,因为当设备关闭时警报会被清除。因此,您应该在设备重启时重新安排警报。您可以使用使用

在清单中声明的​​BroadcastReceiver来解决此问题
<intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>

意图过滤器。

  • 基于事件的行为

编辑(2014.04.19):更多&#34; Android相当于iOS的NSNotification?&#34;面向答案

对于iOS下的通知的其他用途,尤其是NSNotificationCenter postNotificationName:object:userInfo: selector(例如,对于基于事件的策略,例如,为了通知CoreData更改),还有其他可用的方法。

也许您可以使用支持库中提供的LocalBroadcastManager概念。

它被描述为:

  

帮助您注册并向当前对象发送Intent广播。

我们可以将其用作:

private void sendLocalNotification(){
    final Intent intent = new Intent("myLocalNotificationIdentifier");
    intent.putExtra("aKey", aValue);
    // ...
    LocalBroadcastManager.getInstance(aContext).sendBroadcast(intent);
}

然后,您可以在Activity注册给定的通知,例如:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ...
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("myLocalNotificationIdentifier"));
}

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        // specific job according to Intent and its extras...
    }

};

否则,您可以使用Apache许可证2.0版下的Otto提供的Square库。 它被描述为

  

Otto是一种活动总线,旨在解耦您的不同部分   申请,同时仍然允许他们有效沟通。

然而,根据您的要求,您可以使用其他Android概念。 例如,如果要通知数据库更改(在基于ContentProvider概念的项目中),可以使用:

aContentResolver.registerContentObserver(aContentObserver)

使用方法文档here

然后通过如下调用来调用Observer:

aContentResolver.notifyChange(anUri, null)

使用方法文档here