2016-07-12 17 views
0

Ich muss eine bestimmte Aktivität öffnen, wenn Sie auf die Benachrichtigung von Onesignal tippen. Unten habe ich den Code angegeben, den ich bisher versucht habe. Das Problem ist, dass nur für das Ausführen der App funktioniert. Ich muss diese Klasse öffnen, wenn ich die App nicht ausführe.Öffnen Sie eine bestimmte Aktivität, wenn App nicht ausgeführt wird

private class ExampleNotificationOpenedHandler implements OneSignal.NotificationOpenedHandler { 
     @Override 
     public void notificationOpened(String message, JSONObject additionalData, boolean isActive) { 
      try {   
       Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show(); 
      } catch (Throwable t) 

      { 
       t.printStackTrace(); 
      } 
     Intent intent = new Intent(getApplication(), MyActivity.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
     } 
    } 



private void registerWithOneSignal(String tag) { 
     OneSignal.startInit(getContext()) 
       .setAutoPromptLocation(true) 
       .setNotificationOpenedHandler(new ExampleNotificationOpenedHandler()) 
       .init(); 

     OneSignal.sendTag("TAG", tag); 
     OneSignal.idsAvailable(ApplicationSettings.getInstance()); 
     OneSignal.enableVibrate(true); 
     OneSignal.enableSound(true); 
     OneSignal.setSubscription(true); 
     OneSignal.enableNotificationsWhenActive(true); 
     OneSignal.enableInAppAlertNotification(true); 
    } 

Und auch in Manifest-Datei

<meta-data android:name="com.onesignal.NotificationOpened.DEFAULT" android:value="DISABLE" /> 
+0

Bedeuten u eine Aktivität durch Benachrichtigung Klick zu öffnen, wenn App nicht läuft? – Stallion

+0

ja ............ – Hansi

Antwort

1

zunächst fest, ob die Anwendung im Hintergrund läuft oder nicht.

Verwenden Sie diese Methode, um zu bestimmen

 /** 
    * Method checks if the app is in background or not 
    */ 
    public static boolean isAppIsInBackground(Context context) { 
     boolean isInBackground = true; 
    try { 

      ActivityManager am = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE); 
      ActivityManager.RunningTaskInfo foregroundTaskInfo = am.getRunningTasks(1).get(0); 
      String foregroundTaskPackageName = foregroundTaskInfo .topActivity.getPackageName(); 
      PackageManager pm = context.getPackageManager(); 
      PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0); 
      String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString(); 
      if(!AppUtil.getStringResource(context,R.string.app_name).equalsIgnoreCase(foregroundTaskAppName)){ 
       isInBackground=false; 
      } 
     } catch (PackageManager.NameNotFoundException e) { 
      isInBackground=false; 

     } 
     return isInBackground; 
    } 

Basierend auf diesen Wert verwenden diese Logik

Intent resultIntent = new Intent(getApplicationContext(), GCMNotificationActivity.class);//Activity to show once clicked on Notification 
    resultIntent.putExtra(Constants.PUSH_MESSAGE, message); 
    resultIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

    //assign result intent to pending intent 
    PendingIntent resultPendingIntent =PendingIntent.getActivity(getApplicationContext(),0,resultIntent,PendingIntent.FLAG_CANCEL_CURRENT); 
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext()); 

    //set Inbox style 
    NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); 
    inboxStyle.addLine("message");//set message 
    Notification notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0) 
         .setAutoCancel(true) 
         .setContentTitle("Title Message") 
         .setContentIntent(resultPendingIntent) 
         .setStyle(inboxStyle) 
         .setWhen(/* set current time here (long)*/) 
         .setSmallIcon(R.drawable.ic_noti_icon) 
         .setLargeIcon(BitmapFactory.decodeResource(getApplicationContext().getResources(), icon)) /* set icon */ 
         .setContentText(message) 
         .build(); 

    NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(Constants.NOTIFICATION_ID, notification); 
Verwandte Themen