2013-09-15 3 views
10

Я пытаюсь отобразить уведомление в панели уведомлений Android, даже если мое приложение закрыто.андроид уведомления в фоновом режиме, если приложение закрыто?

Я попытался поиска, но у меня не было никакой удачи в поиске помощи.

Пример этого является новостным приложением. Даже если экран телефона выключен или новостное приложение закрыто, оно все равно может отправлять уведомление о последних новостях и отображать его на панели уведомлений.

Как я могу идти об этом в моем приложении?

+0

ли вы найти ответ на свой вопрос? ! такая же проблема здесь –

ответ

14

Вы должны построить Сервис, который обрабатывает ваши новости и показывает уведомления, когда он знает, что это новые новости (Service Doc). Услуга будет работать в фоновом режиме, даже если ваше приложение будет закрыто. Для запуска службы в фоновом режиме после завершения фазы загрузки вам понадобится BroadcastReciever. (Start service after boot).

Услуга будет строить свои уведомления и отправлять их через NotificationManager.

EDIT: This article может удовлетворить ваши потребности

0

Я использовал this answer написать сервис, и как exmaple вам нужно позвонить ShowNotificationIntentService.startActionShow(getApplicationContext()) внутри одного из ваших действий:

import android.app.IntentService; 
import android.content.Intent; 
import android.content.Context; 
public class ShowNotificationIntentService extends IntentService { 
    private static final String ACTION_SHOW_NOTIFICATION = "my.app.service.action.show"; 
    private static final String ACTION_HIDE_NOTIFICATION = "my.app.service.action.hide"; 


    public ShowNotificationIntentService() { 
     super("ShowNotificationIntentService"); 
    } 

    public static void startActionShow(Context context) { 
     Intent intent = new Intent(context, ShowNotificationIntentService.class); 
     intent.setAction(ACTION_SHOW_NOTIFICATION); 
     context.startService(intent); 
    } 

    public static void startActionHide(Context context) { 
     Intent intent = new Intent(context, ShowNotificationIntentService.class); 
     intent.setAction(ACTION_HIDE_NOTIFICATION); 
     context.startService(intent); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     if (intent != null) { 
      final String action = intent.getAction(); 
      if (ACTION_SHOW_NOTIFICATION.equals(action)) { 
       handleActionShow(); 
      } else if (ACTION_HIDE_NOTIFICATION.equals(action)) { 
       handleActionHide(); 
      } 
     } 
    } 

    private void handleActionShow() { 
     showStatusBarIcon(ShowNotificationIntentService.this); 
    } 

    private void handleActionHide() { 
     hideStatusBarIcon(ShowNotificationIntentService.this); 
    } 

    public static void showStatusBarIcon(Context ctx) { 
     Context context = ctx; 
     NotificationCompat.Builder builder = new NotificationCompat.Builder(ctx) 
       .setContentTitle(ctx.getString(R.string.notification_message)) 
       .setSmallIcon(R.drawable.ic_notification_icon) 
       .setOngoing(true); 
     Intent intent = new Intent(context, MainActivity.class); 
     PendingIntent pIntent = PendingIntent.getActivity(context, STATUS_ICON_REQUEST_CODE, intent, 0); 
     builder.setContentIntent(pIntent); 
     NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     Notification notif = builder.build(); 
     notif.flags |= Notification.FLAG_ONGOING_EVENT; 
     mNotificationManager.notify(STATUS_ICON_REQUEST_CODE, notif); 
    } 
} 
Смежные вопросы