如何在应用程序运行时在状态栏中显示图标,包括在后台?

时间:2010-10-19 22:12:52

标签: android icons statusbar uistatusbar

我想在应用程序运行时在状态栏中放置一个图标,包括它在后台运行时。我怎么能这样做?

4 个答案:

答案 0 :(得分:19)

您应该可以使用Notification和NotificationManager执行此操作。然而,获得有保证的方式知道您的应用程序何时未运行是困难的部分。

您可以通过以下方式获得所需内容的基本功能:

Notification notification = new Notification(R.drawable.your_app_icon,
                                             R.string.name_of_your_app, 
                                             System.currentTimeMillis());
notification.flags |= Notification.FLAG_NO_CLEAR
                   | Notification.FLAG_ONGOING_EVENT;
NotificationManager notifier = (NotificationManager)
     context.getSystemService(Context.NOTIFICATION_SERVICE);
notifier.notify(1, notification);

此代码必须位于您确定将在应用程序启动时被触发的位置。可能在您的应用程序的自定义应用程序对象的onCreate()方法。

然而事情发生之后很棘手。杀死应用程序可以随时进行。所以你也可以试着把一些东西放在Application类的onTerminate()中,但是不能保证它被调用。

((NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE)).cancel(1);

将是删除图标所需的内容。

答案 1 :(得分:9)

对于新API,您可以使用NotificationCompat.Builder -

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
    .setSmallIcon(R.mipmap.ic_launcher)
    .setContentTitle("Title");
Intent resultIntent = new Intent(this, MyActivity.class);
PendingIntent resultPendingIntent = PendingIntent.getActivity(
this,
0,
resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
Notification notification = mBuilder.build();
notification.flags |= Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT;

mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotifyMgr.notify(NOTIFICATION_ID, notification);

只要您的应用程序正在运行并且有人手动关闭您的应用程序,它就会显示。您可以随时致电 -

取消通知
mNotifyMgr.cancel(NOTIFICATION_ID);

答案 2 :(得分:6)

查看开发指南“Creating Status Bar Notifications”。

实现仅在应用程序运行时将图标保留在那里的目标的一种方法是在onCreate()初始化通知,并仅在onPause()方法中调用cancel(int) {} 1}}返回true。

一个例子:

isFinishing()

答案 3 :(得分:4)

它确实有效。 我在上面的例子中创建了一个方法:

private void applyStatusBar(String iconTitle, int notificationId) {
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(iconTitle);
Intent resultIntent = new Intent(this, ActMain.class);
PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
Notification notification = mBuilder.build();
notification.flags |= Notification.FLAG_NO_CLEAR|Notification.FLAG_ONGOING_EVENT;

NotificationManager mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotifyMgr.notify(notificationId, notification);}

它应该被称为:applyStatusBar(“Statusbar Test”,10);