Android 当应用程序未运行时打开特定活动

Android 当应用程序未运行时打开特定活动,android,onesignal,Android,Onesignal,我需要了解如何在点击onesignal的通知时打开特定活动。 下面我给出了迄今为止我尝试过的代码。 问题是,这只适用于运行应用程序时。我需要在不运行应用程序时打开该类 private class ExampleNotificationOpenedHandler implements OneSignal.NotificationOpenedHandler { @Override public void notificationOpened(String messag

我需要了解如何在点击onesignal的通知时打开特定活动。 下面我给出了迄今为止我尝试过的代码。 问题是,这只适用于运行应用程序时。我需要在不运行应用程序时打开该类

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" />

首先确定应用程序是否在后台运行

使用此方法来确定

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

您的意思是在应用程序未运行时通过通知单击打开活动吗?