2015-08-08 6 views
1

У меня есть служба, которая была определена следующим образомAndroid - деятельность перезапустит Notification клика (уведомление было открыта приоритетной услуги)

public class ForegroundService extends Service { 
private static final String LOG_TAG = "ForegroundService"; 

@Override 
public void onCreate() { 
    super.onCreate(); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    if(intent != null) { 
     if (intent.getAction().equals(Constants.ACTION.STARTFOREGROUND_ACTION)) { 
      Log.i(LOG_TAG, "Received Start Foreground Intent "); 
      Intent notificationIntent = new Intent(this, DashboardActivity.class); 
      notificationIntent.setAction(Constants.ACTION.MAIN_ACTION); 
      notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

      PendingIntent pendingIntent = PendingIntent.getActivity(getApplication(), 
        0, 
        notificationIntent, 
        PendingIntent.FLAG_NO_CREATE); 

      Intent previousIntent = new Intent(this, ForegroundService.class); 
      previousIntent.setAction(Constants.ACTION.PREV_ACTION); 
      PendingIntent ppreviousIntent = PendingIntent.getService(this, 0, 
        previousIntent, 0); 

      Intent playIntent = new Intent(this, ForegroundService.class); 
      playIntent.setAction(Constants.ACTION.PLAY_ACTION); 
      PendingIntent pplayIntent = PendingIntent.getService(this, 0, 
        playIntent, 0); 

      Intent nextIntent = new Intent(this, ForegroundService.class); 
      nextIntent.setAction(Constants.ACTION.NEXT_ACTION); 
      PendingIntent pnextIntent = PendingIntent.getService(this, 0, 
        nextIntent, 0); 

      Bitmap icon = BitmapFactory.decodeResource(getResources(), 
        R.drawable.art_background); 

      Notification notification = new NotificationCompat.Builder(this) 
        .setContentTitle("Truiton Music Player") 
        .setTicker("Truiton Music Player") 
        .setContentText("My Music") 
        .setSmallIcon(R.drawable.ic_launcher) 
        .setLargeIcon(
          Bitmap.createScaledBitmap(icon, 128, 128, false)) 
        .setContentIntent(pendingIntent) 
        .setOngoing(true) 
        .addAction(android.R.drawable.ic_media_previous, 
          "Previous", ppreviousIntent) 
        .addAction(android.R.drawable.ic_media_play, "Play", 
          pplayIntent) 
        .addAction(android.R.drawable.ic_media_next, "Next", 
          pnextIntent).build(); 
      startForeground(Constants.NOTIFICATION_ID.FOREGROUND_SERVICE, 
        notification); 
     } else if (intent.getAction().equals(Constants.ACTION.PREV_ACTION)) { 
      Log.i(LOG_TAG, "Clicked Previous"); 
     } else if (intent.getAction().equals(Constants.ACTION.PLAY_ACTION)) { 
      Log.i(LOG_TAG, "Clicked Play"); 
     } else if (intent.getAction().equals(Constants.ACTION.NEXT_ACTION)) { 
      Log.i(LOG_TAG, "Clicked Next"); 
     } else if (intent.getAction().equals(
       Constants.ACTION.STOPFOREGROUND_ACTION)) { 
      Log.i(LOG_TAG, "Received Stop Foreground Intent"); 
      stopForeground(true); 
      stopSelf(); 
     } 
    } 
    return START_STICKY; 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    Log.i(LOG_TAG, "In onDestroy"); 
} 

@Override 
public IBinder onBind(Intent intent) { 
    // Used only in case of bound services. 
    return null; 
} 
} 

Я определил следующее в моем манифесте

android:launchMode="singleTask" 

И

это, как я запуск службы

private void showNotificationService() { 
    Intent startIntent = new Intent(DashboardActivity.this, ForegroundService.class); 
    startIntent.setAction(Constants.ACTION.STARTFOREGROUND_ACTION); 
    startService(startIntent); 
} 

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

Также я использую код, предоставленный в этом блоге на переднем плане службы

http://www.truiton.com/2014/10/android-foreground-service-example/

ответ

0

Добавить категорию в свой notificationIntent

См ниже код

notificationIntent.addCategory("android.intent.category.LAUNCHER"); 
0

Я сделал некоторые изменения вашего кода. Проблема заключалась в создании нового намерения.

public class ForegroundService extends Service { 
    private static final String LOG_TAG = "ForegroundService"; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     if(intent != null) { 
      if (intent.getAction().equals(Constants.ACTION.STARTFOREGROUND_ACTION)) { 
       Log.i(LOG_TAG, "Received Start Foreground Intent "); 
       Intent notificationIntent = new Intent(this, DashboardActivity.class); 
       notificationIntent.setAction(Constants.ACTION.MAIN_ACTION); 
       notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 


       PendingIntent pendingIntent = PendingIntent.getActivity(getApplication(), 
         0, 
         notificationIntent, 
         PendingIntent.FLAG_UPDATE_CURRENT); 

       Intent previousIntent = new Intent(this, ForegroundService.class); 
       previousIntent.setAction(Constants.ACTION.PREV_ACTION); 
       PendingIntent ppreviousIntent = PendingIntent.getService(this, 0, 
         previousIntent, 0); 

       Intent playIntent = new Intent(this, ForegroundService.class); 
       playIntent.setAction(Constants.ACTION.PLAY_ACTION); 
       PendingIntent pplayIntent = PendingIntent.getService(this, 0, 
         playIntent, 0); 

       Intent nextIntent = new Intent(this, ForegroundService.class); 
       nextIntent.setAction(Constants.ACTION.NEXT_ACTION); 
       PendingIntent pnextIntent = PendingIntent.getService(this, 0, 
         nextIntent, 0); 

       Bitmap icon = BitmapFactory.decodeResource(getResources(), 
         R.drawable.art_background); 

       Notification notification = new NotificationCompat.Builder(this) 
         .setContentTitle("Truiton Music Player") 
         .setTicker("Truiton Music Player") 
         .setContentText("My Music") 
         .setSmallIcon(R.drawable.ic_launcher) 
         .setLargeIcon(
           Bitmap.createScaledBitmap(icon, 128, 128, false)) 
         .setContentIntent(pendingIntent) 
         .setOngoing(true) 
         .addAction(android.R.drawable.ic_media_previous, 
           "Previous", ppreviousIntent) 
         .addAction(android.R.drawable.ic_media_play, "Play", 
           pplayIntent) 
         .addAction(android.R.drawable.ic_media_next, "Next", 
           pnextIntent).build(); 
       startForeground(Constants.NOTIFICATION_ID.FOREGROUND_SERVICE, 
         notification); 
      } else if (intent.getAction().equals(Constants.ACTION.PREV_ACTION)) { 
       Log.i(LOG_TAG, "Clicked Previous"); 
      } else if (intent.getAction().equals(Constants.ACTION.PLAY_ACTION)) { 
       Log.i(LOG_TAG, "Clicked Play"); 
      } else if (intent.getAction().equals(Constants.ACTION.NEXT_ACTION)) { 
       Log.i(LOG_TAG, "Clicked Next"); 
      } else if (intent.getAction().equals(
        Constants.ACTION.STOPFOREGROUND_ACTION)) { 
       Log.i(LOG_TAG, "Received Stop Foreground Intent"); 
       stopForeground(true); 
       stopSelf(); 
      } 
     } 
     return START_STICKY; 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     Log.i(LOG_TAG, "In onDestroy"); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     // Used only in case of bound services. 
     return null; 
    } 
    } 

Я определил следующее в моем манифесте

android:launchMode="singleInstance" 

Я могу работать для вас. Я сделал это, и я работал! Если вам нужна что-то еще или больше, я доступен. Хорошего дня!