2017-05-09 4 views
0

Ich möchte App öffnen, wenn Gerät Push-Benachrichtigung von GCM erhalten, die gleiche Zeit App ist bereits geschlossen, habe ich diesen Code versucht es funktioniert auf einigen Geräten nicht auf allen Geräten. Unten ist mein Code-Schnipsel,Wie man Android App auf allen Geräten öffnet, wenn Push-Benachrichtigung (GCM) während App geschlossen ist?

@Override 
public void onHandleIntent(Intent intent) { 
notificationManager(this, getString(R.string.new_ride), true); 

}

public static void notificationManager(Context context, String message, boolean 
ring) { 

     try { 
      long when = System.currentTimeMillis(); 

      NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

      Log.v("message",","+message); 

      Intent notificationIntent = new Intent(context, SplashNewActivity.class); 


      notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 

      NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
      builder.setAutoCancel(true); 
      builder.setContentTitle(context.getString(R.string.app_name)); 
      builder.setStyle(new NotificationCompat.BigTextStyle().bigText(message)); 
      builder.setContentText(message); 
      builder.setTicker(message); 

      if(ring){ 
       builder.setLights(Color.GREEN, 500, 500); 
      } 
      else{ 
       builder.setDefaults(Notification.DEFAULT_ALL); 
      } 

      builder.setWhen(when); 
      builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher)); 
      builder.setSmallIcon(R.drawable.notif_icon); 
      builder.setContentIntent(intent); 
      Notification notification = builder.build(); 
      notificationManager.notify(NOTIFICATION_ID, notification); 
      //Open the App while new ride request arrives 
      Intent dialogIntent = new 
      Intent(getBaseContext(),SplashNewActivity.class);            
      dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);           
      getApplication().startActivity(dialogIntent); 
      } catch (Exception e) { 
          e.printStackTrace(); 
      } 

} 

Bitte lassen Sie mich wissen ist es möglich, auf allen Geräten oder es ist geräteabhängig. Vielen Dank im Voraus.

+0

"Ich möchte App öffnen, wenn Gerät Push-Benachrichtigung von GCM gleichzeitig Ap erhalten p ist bereits geschlossen "- der Benutzer mag Ihre Aktivität nicht zu schätzen wissen, wenn er sie mitten in dem, was sie tun, unterbricht. Der Benutzer kann seine Unzufriedenheit mit Ihnen in vielerlei Hinsicht äußern (schlechte Bewertungen, körperliche Gewalt, etc.). "Ich habe diesen Code ausprobiert, es funktioniert bei manchen Geräten nicht auf allen Geräten" - bitte erläutern ** im Detail ** was "nicht auf allen Geräten" bedeutet. Wenn Sie Ihren Debugger oder die Protokollierung verwendet haben, um zu sehen, was passiert ... was passiert? – CommonsWare

Antwort

0

Versuchen Sie den Alarmmanager. Hoffe, das funktioniert !!

 Intent resultIntent = new Intent(this, SplashNewActivity.class); 
     // This ensures that the back button follows the recommended 
     // convention for the back key. 
     TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 

     // Adds the back stack for the Intent (but not the Intent itself). 
     stackBuilder.addParentStack(SplashNewActivity.class); 

     // Adds the Intent that starts the Activity to the top of the stack. 
     stackBuilder.addNextIntent(resultIntent); 
     PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(
       0, PendingIntent.FLAG_UPDATE_CURRENT); 

     long futureInMillis = System.currentTimeMillis(); 
     AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, futureInMillis, resultPendingIntent); 

rufen Sie diesen Code in Ihrer onMessageReceived-Methode auf.

+0

Erarbeiten Sie Ihre Antwort: Erklären Sie, was das tut, welche Zeile was macht, und fügen Sie mehr dazu hinzu, wie man es benutzt – Zoe

+0

versuchte nicht funktioniert..ich denke, Gerät kann keine Benachrichtigung erhalten, die das Hauptproblem ist. – Prashant

+0

@Prashant Stellen Sie sicher, dass Ihr Gerät die GCM-Registrierungs-ID erhält oder nicht. Wenn es nicht null ist und erfolgreich auf Ihrem Server gespeichert wurde, prüfen Sie auf der Serverseite, ob die Benachrichtigung zugestellt wird oder ob ein Fehler ausgegeben wird. – Chowdary102

1

Ich benutze diese Methode in Service-Klasse:

Intent myAppIntent = launchIntent(this); 
      startActivity(myAppIntent); 

wo

@SuppressLint("NewApi") 
    public static Intent launchIntent(Context ctx) { 
     final ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE); 
     Intent intent = new Intent(); 
     boolean activated = false; 


     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      List<ActivityManager.AppTask> tasks = am.getAppTasks(); 

      for (ActivityManager.AppTask task: tasks){ 
       intent = task.getTaskInfo().baseIntent; 
       intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       activated = true; 
       break; 
      } 
     } else { 
      @SuppressWarnings("deprecation") 
      final List<ActivityManager.RecentTaskInfo> recentTaskInfos = am.getRecentTasks(1024,0); 
      String myPkgNm = ctx.getPackageName(); 
      if (!recentTaskInfos.isEmpty()) { 
       ActivityManager.RecentTaskInfo recentTaskInfo; 
       final int size = recentTaskInfos.size(); 
       for (int i = 0; i < size; i++) { 
        recentTaskInfo = recentTaskInfos.get(i); 
        if (recentTaskInfo.baseIntent.getComponent().getPackageName().equals(myPkgNm)) { 
         intent = recentTaskInfo.baseIntent; 
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         activated = true; 
        } 
       } 
      } 
     } 
     if (!activated) { 
      intent = new Intent(ctx, YourDefaultActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     } 

     return intent; 
    } 

über die Erlaubnis nicht vergessen (das in neuem APIs ist veraltet, aber dennoch ist erforderlich)

<uses-permission android:name="android.permission.GET_TASKS" />

+0

funktioniert nicht .... versuchte .i denke, Gerät kann nicht in der Lage, Benachrichtigung zu erhalten, dass das Hauptthema ist.wie auf diese @Vyacheslav loswerden – Prashant

Verwandte Themen