简体   繁体   中英

Open a specific Activity when app is not running

I need to how to open a specific activity when tap on the notification from onesignal. Below I have given the code that I have tried so far. The problem is That works only for when running the app. I need to open that class when not running the app.

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);
    }

And also in Manifest file

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

First determine whether your application is running in background or not.

Use this method to determine

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

Based on this value use this logic

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM