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
- WP7“Navigation is not allowed when the task is not in the foreground.”解決方案Navigation
- ORA-19527 reported in Standby Database when starting Managed Recovery_352879.1Database
- ORA-00845 When Starting Up An 11g Instance With AMM Configured
- Notification使用詳解之四:由後臺服務向Activity傳送進度資訊
- laravel NotificationLaravel
- Starting & Stopping SAP
- Starting HAL daemon:[FAILED]AI
- REDIS key notificationRedis
- Android 《Notification》Android
- Notification使用詳解之三:通過服務更新進度通知&在Activity中監聽服務進度
- ABAP webdynpro的view navigation和WebUI的view navigationWebViewNavigationUI
- TNS-12537, TNS-12560, TNS-00507 Linux Error: 29: Illegal seek error When Starting the ListenerLinuxError
- websword-update-notificationWeb
- ORACLE CASE WHEN 及 SELECT CASE WHEN的用法Oracle
- Android Starting Window(Preview Window)AndroidView
- Oracle Case WhenOracle
- SQL Case WhenSQL
- When to Partition a Table
- Jetpack 之 Navigation 初探JetpackNavigation
- Flutter 通知(Notification)冒泡原理Flutter
- Android中的NotificationAndroid
- Notification桌面通知實踐
- Android Notification 詳解Android
- Android 通知之 NotificationAndroid
- android之Notification通知Android
- Activity
- Activity 知識梳理(2) Activity 棧
- android-Building Apps for Work,Ensuring Compatibility with Managed ProfilesAndroidUIAPP
- Starting httpd: httpd: Could not reliably determine the serverhttpdServer
- android-Providing Up Navigation,Providing Proper Back NavigationAndroidNavigation
- HarmonyOS:Navigation元件的使用Navigation元件
- 鴻蒙Navigation入門使用鴻蒙Navigation
- Android O 新特性 — NotificationAndroid
- User Notification Framework 框架的使用Framework框架
- oreo上的notification詳解
- Android通知Notification全面剖析Android
- Notification與多執行緒執行緒