Как показать значок в строке состояния, когда приложение работает, в том числе на заднем плане?
-
09-10-2019 - |
Вопрос
Я хочу поставить значок в строке состояния, когда запускается мое приложение, в том числе, в том числе, когда он работает на заднем плане. Как я могу это сделать?
Решение
Вы должны быть в состоянии сделать это с уведомлением и уведомлениемМаджером. Однако получение гарантированного способа узнать, когда ваше приложение не работает, является жесткой частью.
Вы можете получить основную функциональность того, что вы хотите, делая что-то вроде:
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 ().
Однако после этого все сложно. Убийство заявления может произойти в любое время. Таким образом, вы можете попытаться поставить что-то в 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);
Он покажет, пока ваша заявка работает, и кто-то вручную закрывает ваше приложение. Вы всегда можете отменить свое уведомление, позвонив -
mNotifyMgr.cancel(NOTIFICATION_ID);
Посмотрите на руководство по DEV "Создание Уведомления о состоянии состояния".
Один из способов достичь цели сохранения иконы там только тогда, когда приложение запущено, - это инициализировать уведомление в onCreate()
и позвонить cancel(int)
в твоей onPause()
метод только если isFinishing()
возвращает true.
Пример:
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);
}
}
Это реально работает. Я создал метод из примера выше:
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», 10);