2016-07-12 13 views
0

私は、oneignalから通知をタップするときに特定のアクティビティを開く方法が必要です。 以下、私がこれまでに試したコードを挙げました。 問題は、アプリを実行しているときにのみ機能します。私は、アプリケーションを実行していないときにそのクラスを開く必要があります。アプリが実行されていないときに特定のアクティビティを開く

マニフェストファイル内
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); 
    } 

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

uは、通知をクリックしてアクティビティを開くために意味しますか? – Stallion

+0

はい............ – Hansi

答えて

1

まず、アプリケーションがバックグラウンドで実行されているかどうかを判断します。決定する

このメソッドを使用し、この値の使用に基づいて

 /** 
    * 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; 
    } 

このロジック

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); 
アプリが実行されていないとき
関連する問題