android-Building a Notification,Preserving Navigation when Starting an Activity
NotificationCompat.Builder
is
in the Support Library.
You should use NotificationCompat
and
its subclasses, particularly NotificationCompat.Builder
,
to provide the best notification support for a wide range of platforms.
>When creating a notification, specify the UI content and actions with a NotificationCompat.Builder
object.
At bare minimum, a Builder
object must include the following:
- A small icon, set by
setSmallIcon()
- A title, set by
setContentTitle()
- Detail text, set by
setContentText()
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!");
Intent resultIntent = new Intent(this, ResultActivity.class); ... // Because clicking the notification opens a new ("special") activity, there's // no need to create an artificial back stack. PendingIntent resultPendingIntent = PendingIntent.getActivity( this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT );
To issue the notification:
- Get an instance of
NotificationManager
. - Use the
notify()
method to issue the notification. When you callnotify()
, specify a notification ID. You can use this ID to update the notification later on. This is described in more detail in Managing Notifications. - Call
build()
, which returns aNotification
object containing your specifications.For example:
NotificationCompat.Builder mBuilder; ... // Sets an ID for the notification int mNotificationId = 001; // Gets an instance of the NotificationManager service NotificationManager mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); // Builds the notification and issues it. mNotifyMgr.notify(mNotificationId, mBuilder.build());
Part of designing a notification is preserving the user's expected navigation experience. For a detailed discussion of this topic, see the Notifications API guide. There are two general situations:
- Regular activity
- You're starting an
Activity
that's part of the application's normal workflow. - Special activity
- The user only sees this
Activity
if it's started from a notification. In a sense, theActivity
extends the notification by providing information that would be hard to display in the notification itself.
Intent resultIntent = new Intent(this, ResultActivity.class); TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); // Adds the back stack stackBuilder.addParentStack(ResultActivity.class); // Adds the Intent to the top of the stack stackBuilder.addNextIntent(resultIntent); // Gets a PendingIntent containing the entire back stack PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); ... NotificationCompat.Builder builder = new NotificationCompat.Builder(this); builder.setContentIntent(resultPendingIntent); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(id, builder.build());A special
Activity
doesn't
need a back stack, so you don't have to define its Activity
hierarchy
in the manifest, and you don't have to call addParentStack()
to
build a back stack. Instead, use the manifest to set up the Activity
task
options, and create the PendingIntent
by
calling getActivity()
android:name="activityclass"
- The activity's fully-qualified class name.
android:taskAffinity=""
- Combined with the
FLAG_ACTIVITY_NEW_TASK
flag that you set in code, this ensures that thisActivity
doesn't go into the application's default task. Any existing tasks that have the application's default affinity are not affected. android:excludeFromRecents="true"
- Excludes the new task from Recents, so that the user can't accidentally navigate back to it.
This snippet shows the element:
<activity android:name=".ResultActivity" ... android:launchMode="singleTask" android:taskAffinity="" android:excludeFromRecents="true"> </activity>
>Build and issue the notification:
- Create an
Intent
that starts theActivity
. - Set the
Activity
to start in a new, empty task by callingsetFlags()
with the flagsFLAG_ACTIVITY_NEW_TASK
andFLAG_ACTIVITY_CLEAR_TASK
. - Set any other options you need for the
Intent
. - Create a
PendingIntent
from theIntent
by callinggetActivity()
. You can then use thisPendingIntent
as the argument tosetContentIntent()
.
// Instantiate a Builder object. NotificationCompat.Builder builder = new NotificationCompat.Builder(this); // Creates an Intent for the Activity Intent notifyIntent = new Intent(new ComponentName(this, ResultActivity.class)); // Sets the Activity to start in a new, empty task notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); // Creates the PendingIntent PendingIntent notifyIntent = PendingIntent.getActivity( this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT ); // Puts the PendingIntent into the notification builder builder.setContentIntent(notifyIntent); // Notifications are issued by sending them to the // NotificationManager system service. NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // Builds an anonymous Notification object from the builder, and // passes it to the NotificationManager mNotificationManager.notify(id, builder.build());
相關文章
- ORA-15055 Unable to Connect to ASM When Starting an InstanceASM
- Android 《Notification》Android
- laravel NotificationLaravel
- 細說 PEP 468: Preserving Keyword Argument Order
- 3.1.5.2 Starting an Instance, and Mounting and Opening a DatabaseDatabase
- ABAP webdynpro的view navigation和WebUI的view navigationWebViewNavigationUI
- Android中的NotificationAndroid
- 論文閱讀 GloDyNE Global Topology Preserving Dynamic Network Embedding
- Android O 新特性 — NotificationAndroid
- Flutter 通知(Notification)冒泡原理Flutter
- Android之Notification和RemoteviewAndroidREMView
- Notification桌面通知實踐
- case when 語句
- Activity
- Jetpack 之 Navigation 初探JetpackNavigation
- [Vue Router] Programmatic NavigationVueNavigation
- 論文閱讀:Robust and Privacy-Preserving Collaborative Learning: A Comprehensive Survey
- 一個Activity顯示多個Activity
- User Notification Framework 框架的使用Framework框架
- Android 8 通知渠道(Notification Channels)Android
- oreo上的notification詳解
- [轉]Android 通知Notification 詳解Android
- Activity梳理
- HarmonyOS:Navigation元件的使用Navigation元件
- Android Jetpack Navigation基本使用AndroidJetpackNavigation
- Non-UTF-8 code starting with '\xe4'
- Ant design的Notification原始碼分析原始碼
- Android 深入理解 Notification 機制Android
- 當Notification和Websocket遇到https、httpWebHTTP
- 『React Navigation 3x系列教程』之React Navigation 3x開發指南ReactNavigation
- [Android]關閉所有Activity,開啟某個ActivityAndroid
- mysql中case when的使用MySql
- sql case when, Exist ,group by ,聚合SQL
- Oracle case when改寫SQLOracleSQL
- Laravel query when 的查詢Laravel
- SpokenEnglish01_ When's it due?
- [Reactive] Run functions when data changesReactFunction
- SQL Server CASE WHEN ... THEN ... ELSE ... ENDSQLServer
- What are general rules when deciding on index?Index