Android 相当于 iOS 的 UILocalNotification?
<p><p>我希望在我的 Android 应用程序中使用本地通知,并且想知道 Android 是否有类似 iOS 的 <code>UILocalNotification</code> 可用的东西?</p>
<p>我喜欢 <code>UILocalNotification</code> 允许我为 future 某个日期“安排”一个或多个本地通知,无论手机是醒着还是睡着,这些都会触发(就像常规推送通知一样) .</p>
<p>在我弄乱 <code>AlarmManager</code> 之前,我想知道 Android 是否有一个干净的方法来完成这个。</p>
<p><strong>编辑:什么是 <code>UILocalNotification</code>?</strong></p>
<p><em>UILocalNotification 的实例表示应用程序可以安排在特定日期和时间向其用户呈现的通知。操作系统负责在适当的时间传递通知;应用程序不一定要运行才能发生这种情况。尽管本地通知类似于远程通知,因为它们用于显示警报、播放声音和标记应用程序图标,但它们是在本地编写和传递的,不需要与远程服务器连接。</em> </p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><ul>
<li><strong>基于时间的触发器</strong></li>
</ul>
<p>考虑到您的基于时间的触发要求,<code>AlarmManager</code> 似乎是合适的解决方案(可提供专门的培训 <a href="http://developer.android.com/training/scheduling/alarms.html" rel="noreferrer noopener nofollow">here</a>)。您应该谨慎使用它,因为警报会在设备关闭时被清除。因此,您应该在设备重新启动时重新安排警报。您可以使用在 list 中声明的 BroadcastReceiver 来解决这个问题</p>
<pre class="lang-xml prettyprint-override"><code><intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</code></pre>
<p> Intent 过滤器。</p>
<ul>
<li><strong>基于事件的行为</strong></li>
</ul>
<p><strong>编辑 (2014.04.19):</strong> 更多“Android 相当于 iOS 的 NSNotification?”有针对性的回答</p>
<p>iOS 下通知的其他用途,尤其是 <a href="https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/nsnotificationcenter_Class/Reference/Reference.html#//apple_ref/occ/instm/NSNotificationCenter/postNotificationName%3aobject%3auserInfo%3a" rel="noreferrer noopener nofollow"><code>NSNotificationCenter postNotificationName:object:userInfo:</code> selector</a> (例如,对于基于事件的策略,例如通知 CoreData 更改),还有其他可用的方法。</p>
<p>也许您可以使用 <a href="http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html" rel="noreferrer noopener nofollow">LocalBroadcastManager</a>支持库中提供的概念。</p>
<p>描述为:</p>
<blockquote>
<p>Helper to register for and send broadcasts of Intents to local objects within your process.</p>
</blockquote>
<p>我们可以这样使用:</p>
<pre class="lang-java prettyprint-override"><code>private void sendLocalNotification(){
final Intent intent = new Intent("myLocalNotificationIdentifier");
intent.putExtra("aKey", aValue);
// ...
LocalBroadcastManager.getInstance(aContext).sendBroadcast(intent);
}
</code></pre>
<p>然后,您可以在 <code>Activity</code> 中注册给定通知,例如:</p>
<pre class="lang-java prettyprint-override"><code>@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...
}
};
</code></pre>
<p>否则,您可以使用 <a href="http://square.github.io/otto/" rel="noreferrer noopener nofollow">Otto</a> <a href="http://square.github.io/" rel="noreferrer noopener nofollow">Square</a> 提供的库根据 Apache 许可证,版本 2.0。
它被描述为</p>
<blockquote>
<p>Otto is an event bus designed to decouple different parts of your
application while still allowing them to communicate efficiently.</p>
</blockquote>
<p>不过,根据您的要求,您可以使用其他 Android 概念。
例如,如果您想在数据库更改时收到通知(在基于 ContentProvider 概念的项目中),您可以使用:</p>
<pre class="lang-java prettyprint-override"><code>aContentResolver.registerContentObserver(aContentObserver)
</code></pre>
<p>带有方法文档<a href="http://developer.android.com/reference/android/content/ContentResolver.html#registerContentObserver%28android.net.Uri,%20boolean,%20android.database.ContentObserver%29" rel="noreferrer noopener nofollow">here</a> .</p>
<p>然后 Observer 将通过如下调用调用:</p>
<pre class="lang-java prettyprint-override"><code>aContentResolver.notifyChange(anUri, null)
</code></pre>
<p>带有方法文档<a href="http://developer.android.com/reference/android/content/ContentResolver.html#notifyChange%28android.net.Uri,%20android.database.ContentObserver%29" rel="noreferrer noopener nofollow">here</a> .</p></p>
<p style="font-size: 20px;">关于Android 相当于 iOS 的 UILocalNotification?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/22944218/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/22944218/
</a>
</p>
页:
[1]