Push notifications service for Android 4.4

2020-03-26 11:36发布

问题:

I have done work on push notifications and its working correct but in case till api level 4.0. But notification click does not open the activity in case of api 4.4....I am not able to understand the answer, I have search on KitKat and for notifications it has use Notification.Builder Api,with which it gives the same result.

private void generateNotification(Context context, String message, String id) {
    int icon = R.drawable.app_icon;
    long when = System.currentTimeMillis();
    NotificationManager notificationManager = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);

    Notification notification = new Notification(icon, message, when);
    String title = context.getString(R.string.app_name);

    JSONObject jobj = new JSONObject();

    try {
        jobj.put("id", id);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    System.out.println("json object" + jobj.toString());
    Intent notificationIntent = null;

    notificationIntent = new Intent(context, JamInfo.class);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    notificationIntent.putExtra("longi", longi);
    notificationIntent.putExtra("lati", lati);


    PendingIntent intent = PendingIntent.getActivity(context, 0,
            notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);


    notification.setLatestEventInfo(context, title, message, intent);


    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    notification.defaults |= Notification.DEFAULT_VIBRATE;
    notification.defaults |= Notification.DEFAULT_LIGHTS;
     }

    notificationManager.notify((int) System.currentTimeMillis(),
            notification);

}

回答1:

This is working for my apps... Try this...

private void showNotification(Context context) {
        // TODO AK-generated method stub
        String appName = context.getString(R.string.app_name);
        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.drawable.notification_icon)
                        .setContentTitle(appName)
                        .setContentText(appName);

        Uri sound = Uri.parse("android.resource://" + context.getPackageName() + "/raw/" + audioToneName);
        mBuilder.setSound(sound);
        mBuilder.setAutoCancel(true);
        mBuilder.setVibrate(Utility.vibrationPattern);
        // Creates an explicit intent for an Activity in your app
        Intent resultIntent = new Intent(context, RootActivity.class);
        // The stack builder object will contain an artificial back stack for
        // the
        // started Activity.
        // This ensures that navigating backward from the Activity leads out of
        // your application to the Home screen.
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
        // Adds the back stack for the Intent (but not the Intent itself)
        stackBuilder.addParentStack(RootActivity.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
                        );
        mBuilder.setContentIntent(resultPendingIntent);
        NotificationManager mNotificationManager =
                (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        // mId allows you to update the notification later on.
        mNotificationManager.notify(321, mBuilder.build());
    }


回答2:

Try something like below:

        private final static int NOTIFICATION_ID = 1;
        private static NotificationManager mNotificationManager;

        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
            // API 16 onwards
            Notification.Builder builder = new Notification.Builder(context);
            builder.setAutoCancel(false)
                .setContentIntent(pendingIntent)
                .setContentText(context.getString(R.string.notification_text))
                .setContentTitle(context.getString(R.string.app_name))
                .setOngoing(true)
                .setSmallIcon(R.drawable.ic_notifier)
                .setWhen(System.currentTimeMillis());
            Notification notification = builder.build();
            notification.flags |= Notification.FLAG_ONGOING_EVENT | Notification.FLAG_NO_CLEAR;
            mNotificationManager.notify(NOTIFICATION_ID, notification);         
        } else {
            // API 15 and earlier
            NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
            builder.setAutoCancel(false)
                .setContentIntent(pendingIntent)
                .setContentText(context.getString(R.string.notification_text))
                .setContentTitle(context.getString(R.string.app_name))
                .setOngoing(true)
                .setSmallIcon(R.drawable.ic_notifier)
                .setWhen(System.currentTimeMillis());
            Notification notification = builder.getNotification();
            notification.flags |= Notification.FLAG_ONGOING_EVENT | Notification.FLAG_NO_CLEAR;
            mNotificationManager.notify(NOTIFICATION_ID, notification);         
        }

Add the JSON part where appropriate. And don't forget to add the android-support-v4.jar to your project or it won't compile.