android-Updating Notifications,Using Big View Styles,Displaying Progress in a Notification
When you need to issue a notification multiple times for the same type of event, you should avoid making a completely new notification. Instead, you should consider updating a previous notification, either by changing some of its values or by adding to it, or both.
》 To set up a notification so it can be updated, issue it with a notification ID by calling NotificationManager.notify(ID,
notification)
. To update this notification once you've issued it, update or create a NotificationCompat.Builder
object,
build a Notification
object
from it, and issue theNotification
with
the same ID you used previously.
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // Sets an ID for the notification, so it can be updated int notifyID = 1; mNotifyBuilder = new NotificationCompat.Builder(this) .setContentTitle("New Message") .setContentText("You've received new messages.") .setSmallIcon(R.drawable.ic_notify_status) numMessages = 0; // Start of a loop that processes data and then notifies the user ... mNotifyBuilder.setContentText(currentText) .setNumber(++numMessages); // Because the ID remains unchanged, the existing notification is // updated. mNotificationManager.notify( notifyID, mNotifyBuilder.build());
Notifications remain visible until one of the following happens:
- The user dismisses the notification either individually or by using "Clear All" (if the notification can be cleared).
- The user touches the notification, and you called
setAutoCancel()
when you created the notification. - You call
cancel()
for a specific notification ID. This method also deletes ongoing notifications. - You call
cancelAll()
, which removes all of the notifications you previously issued.
Notifications in the notification drawer appear in two main visual styles, normal view and big view.
The big view of a notification only appears when the notification is expanded. This happens when the notification is at the top of the drawer, or the user clicks the notification.
Big views were
introduced in Android 4.1, and they're not supported on older devices.
The normal view provides these features through a new activity that launches when the user clicks
the notification. Keep this in mind as you design your notifications—first provide the functionality in the normal view, since this is how many users will interact with the notification.
》In this snippet, the IntentService
method onHandleIntent()
specifies
the new activity that will be launched if the user clicks the notification itself. The method setContentIntent()
defines
a pending intent that should be fired when the user clicks the notification, thereby launching the activity.
Intent resultIntent = new Intent(this, ResultActivity.class); resultIntent.putExtra(CommonConstants.EXTRA_MESSAGE, msg); resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); // Because clicking the notification launches 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 ); // This sets the pending intent that should be fired when the user clicks the // notification. Clicking the notification launches a new activity. builder.setContentIntent(resultPendingIntent);
// Sets up the Snooze and Dismiss action buttons that will appear in the // big view of the notification. Intent dismissIntent = new Intent(this, PingService.class); dismissIntent.setAction(CommonConstants.ACTION_DISMISS); PendingIntent piDismiss = PendingIntent.getService(this, 0, dismissIntent, 0); Intent snoozeIntent = new Intent(this, PingService.class); snoozeIntent.setAction(CommonConstants.ACTION_SNOOZE); PendingIntent piSnooze = PendingIntent.getService(this, 0, snoozeIntent, 0);
This snippet shows how to construct the Builder
object. It sets
the style for the big view to be "big text," and sets its content to be the reminder message. It uses addAction()
to
add the Snooze and Dismiss buttons (and their associated pending intents) that will appear in the notification's big view:
// Constructs the Builder object. NotificationCompat.Builder builder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_stat_notification) .setContentTitle(getString(R.string.notification)) .setContentText(getString(R.string.ping)) .setDefaults(Notification.DEFAULT_ALL) // requires VIBRATE permission /* * Sets the big view "big text" style and supplies the * text (the user's reminder message) that will be displayed * in the detail area of the expanded notification. * These calls are ignored by the support library for * pre-4.1 devices. */ .setStyle(new NotificationCompat.BigTextStyle() .bigText(msg)) .addAction (R.drawable.ic_stat_dismiss, getString(R.string.dismiss), piDismiss) .addAction (R.drawable.ic_stat_snooze, getString(R.string.snooze), piSnooze);》Displaying Progress in a Notification
Notifications can include an animated progress indicator that shows users the status of an ongoing
operation. If you can estimate how long the operation takes and how much of it is complete at any time, use the "determinate" form of the indicator (a progress bar). If you can't estimate the length of the operation, use the "indeterminate" form of the indicator
(an activity indicator).
Progress indicators are displayed with the platform's implementation of the ProgressBar
class.
To use a progress indicator, call setProgress()
.
The determinate and indeterminate forms are described in the following sections.
》To remove the progress bar, callsetProgress(0,
0, false)
. For example:
int id = 1; ... mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mBuilder = new NotificationCompat.Builder(this); mBuilder.setContentTitle("Picture Download") .setContentText("Download in progress") .setSmallIcon(R.drawable.ic_notification); // Start a lengthy operation in a background thread new Thread( new Runnable() { @Override public void run() { int incr; // Do the "lengthy" operation 20 times for (incr = 0; incr <= 100; incr+=5) { // Sets the progress indicator to a max value, the // current completion percentage, and "determinate" // state mBuilder.setProgress(100, incr, false); // Displays the progress bar for the first time. mNotifyManager.notify(id, mBuilder.build()); // Sleeps the thread, simulating an operation // that takes time try { // Sleep for 5 seconds Thread.sleep(5*1000); } catch (InterruptedException e) { Log.d(TAG, "sleep failure"); } } // When the loop is finished, updates the notification mBuilder.setContentText("Download complete") // Removes the progress bar .setProgress(0,0,false); mNotifyManager.notify(id, mBuilder.build()); } } // Starts the thread by calling the run() method in its Runnable ).start();
To see how continuing activity indicators work, refer to the preceding snippet. Locate the following lines:
// Sets the progress indicator to a max value, the current completion // percentage, and "determinate" state mBuilder.setProgress(100, incr, false); // Issues the notification mNotifyManager.notify(id, mBuilder.build());
Replace the lines you've found with the following lines. Notice that the third parameter in the setProgress()
call
is set to true
to indicate that the progress bar is indeterminate:
// Sets an activity indicator for an operation of indeterminate length mBuilder.setProgress(0, 0, true); // Issues the notification mNotifyManager.notify(id, mBuilder.build());
相關文章
- [TypeStyle] Reusable styles using TypeStyle mixins
- How to Monitor the Progress of a Materialized View Refresh (MVIEW)ZedView
- android TV-Building a Details View,Displaying a Now Playing CardAndroidUIAIView
- Using View and Data API with MeteorViewAPI
- Send Push Notifications to iOS Devices using Xcode 8 and Swift 3, APNs Auth KeyiOSdevXCodeSwift
- Leadership Styles
- openpyxl styles 模組
- Unable to View Chinese Font When Using Tools>Copy FileView
- Provide an Alternative View to Data Using Splitter Window (轉)IDEView
- Android Styles and ThemesAndroid
- Server shutdown in progressServer
- Progress語法
- laravel NotificationLaravel
- iOS 10 的推送 User Notifications FrameworkiOSFramework
- iOS 開發中,怎樣用好 Notifications?iOS
- REDIS key notificationRedis
- Android 《Notification》Android
- HTML <progress> 進度條HTML
- [Angular] Progress HTTP Events with 'HttpRequest'AngularHTTP
- SPS-SCIENCE PROGRESS
- Enable CSS active pseudo styles in Mobile SafariCSS
- HTML5 Web Notifications 桌面推送小記HTMLWeb
- websword-update-notificationWeb
- CSS 設定 <progress>樣式CSS
- How to move progress database to different OSDatabase
- mysqld: Sort aborted: Server shutdown in progressMySqlServer
- PythonModule_openpyxl_styles樣式處理Python
- RMAN progress and what it is waiting for scriptsAI
- 鴻蒙HarmonyOS實戰-ArkUI元件(Progress)鴻蒙UI元件
- Flutter 通知(Notification)冒泡原理Flutter
- Android中的NotificationAndroid
- Notification桌面通知實踐
- Android Notification 詳解Android
- Android 通知之 NotificationAndroid
- android之Notification通知Android
- sysaux bigUX
- SAP PM入門系列27 - IW29 Display Notifications
- 解決ERROR ResizeObserver loop completed with undelivered notifications.ErrorServerOOP