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

当我的应用程序运行时(包括在后台运行时),我想在状态栏中放置一个图标。 我怎样才能做到这一点?

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

你应该可以通过Notification和NotificationManager来完成。 然而,获得一个有保证的方式来知道什么时候你的应用程序不运行是困难的部分。

您可以通过执行以下操作来获得所需的基本function:

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); 

将是什么需要删除图标。

对于新的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); 

只要您的应用程序正在运行,并且有人手动closures您的应用程序,它就会显示。 您可以随时取消您的通知 –

 mNotifyMgr.cancel(NOTIFICATION_ID); 

看看开发指南“ 创build状态栏通知 ”。

只有当应用程序正在运行时才能实现将图标保留在那里的一种方法是,只有在isFinishing()返回true时,才会在onCreate()初始化通知,并在onPause()方法中调用cancel(int)

一个例子:

 private static final int NOTIFICATION_EX = 1; private NotificationManager notificationManager; @Override public void onCreate() { super.onCreate(); notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); int icon = R.drawable.notification_icon; CharSequence tickerText = "Hello"; long when = System.currentTimeMillis(); Notification notification = new Notification(icon, tickerText, when); Context context = getApplicationContext(); CharSequence contentTitle = "My notification"; CharSequence contentText = "Hello World!"; Intent notificationIntent = new Intent(this, MyClass.class); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); notificationManager.notify(NOTIFICATION_EX, notification); } @Override protected void onPause() { super.onPause(); if (isFinishing()) { notificationManager.cancel(NOTIFICATION_EX); } } 

真的行。 我从上面的例子中创build了一个方法:

 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);