2013-03-22 12 views
16

Wykonuję powiadomienia push w mojej aplikacji na Androida, które są uruchamiane przez GCM. Chcę wyświetlić powiadomienie, jeśli aplikacja działa w oknie alertu, jeśli aplikacja nie jest uruchomiona, oznacza to, że nie na pierwszym planie wyświetla się powiadomienie na pasku stanu. Jak ustalić, czy aplikacja działa i jest na pierwszym planie? jest to możliwe, aby wyświetlać powiadomienia takie jak to. Korzystam z tego kodu do wyświetlania paska stanu powiadomienie pushWyświetl powiadomienie push w polu alertu, gdy aplikacja działa na pierwszym planie.

NotificationManager notificationManager = (NotificationManager) 
       context.getSystemService(Context.NOTIFICATION_SERVICE); 
     Notification notification = new Notification(icon, message, when); 

     String title = context.getString(R.string.app_name); 

     Intent notificationIntent = new Intent(context, BottomActivity.class); 
     // set intent so it does not start a new activity 
     notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 
     notification.setLatestEventInfo(context, title, message, intent); 
     notification.flags |= Notification.FLAG_AUTO_CANCEL; 

     // Play default notification sound 
     notification.defaults |= Notification.DEFAULT_SOUND; 

     //notification.sound = Uri.parse("android.resource://" + context.getPackageName() + "your_sound_file_name.mp3"); 

     // Vibrate if vibrate is enabled 
     notification.defaults |= Notification.DEFAULT_VIBRATE; 
     notificationManager.notify(0, notification); 
+1

tylko dla informacji, jeśli jest to nowy projekt, który trzeba zastosować GCM zamiast C2DM jak to przestarzała i Google powiedzieć "C2DM zaakceptuje żadnych nowych użytkowników i będzie udzielać żadnych nowych quotas " – NickT

+0

ok dzięki, będę używać GCM i będę edytować moje pytanie –

+0

@ Jithu muszę również zrobić to samo w jednej z moich aplikacji, czy znalazłeś właściwe rozwiązanie i umysłu post tutaj to samo, byłoby to świetna pomoc dzięki. –

Odpowiedz

1

Ile masz aktywności? Jeśli tylko jeden, to dość łatwo zachować odniesienie singleton do niego między onResume() i onPause() (AKA, gdy jest aktywny) i wywołać działanie z odbiornika, jeśli jest. jeśli masz wiele zajęć, możesz osiągnąć podobną logikę dzięki wspólnej dla nich klasie bazowej. Coś takiego:

class MyActivity: Activity 
{ 
    static private MyActivity _Current = null; 

    protected void onResume() //Activated 
    { 
     super.onResume(); 
     _Current = this; 
    } 

    protected void onPause() //Deactivated 
    { 
     super.onPause(); 
     _Current = null; 
    } 

    //This is for the receiver to call 
    static public PopAlert() 
    { 
     if(_Current != null) 
     { 
      new AlertDialog.Builder(_Current) 
       .setMessage("Hello world") 
       //More alert setup; use _Current as a context object 
       .create().show(); 
     } 
    } 
} 
2

Możesz utworzyć nowe działanie i motyw tak samo jak dialog i sprawdzić aktywność pierwszego planu. Sprawdź poniżej kod.

  ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
     List<RunningTaskInfo> services = activityManager 
       .getRunningTasks(Integer.MAX_VALUE); 
     boolean isActivityFound = false; 

     if (services.get(0).topActivity.getPackageName().toString() 
       .equalsIgnoreCase(context.getPackageName().toString())) { 
      isActivityFound = true; 
     } 

     if (isActivityFound) { 
      resultIntent = new Intent(context, AlertDialogNotification.class); 
      resultIntent.putExtra(EXTRA_ALERT_MESSAGE_BEAUTIFUL, "anyMessage"); 
      resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(resultIntent); 
     } 

W manifeście utwórz motyw jako okno dialogowe dla aktywności. Mam nadzieję, że to pomoże. Daj nam znać, jeśli masz problem.

0

spróbuj te

public static boolean isAppIsInBackground(Context context) { 

     boolean isInBackground = true; 
     ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE); 
     if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) { 
      List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses(); 
      for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) { 
       if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { 
        for (String activeProcess : processInfo.pkgList) { 
         if (activeProcess.equals(context.getPackageName())) 
          isInBackground = false; 
        } 
       } 
      } 
     } else { 
      List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
      ComponentName componentInfo = taskInfo.get(0).topActivity; 
      if (componentInfo.getPackageName().equals(context.getPackageName())) { 
       isInBackground = false; 
      } 
     } 
Powiązane problemy