6

我正在开发我的第一个 Android 应用程序,以使用 Google Cloud Messaging (GCM) 服务进行推送通知。我已经到了可以从服务器应用程序成功发送消息的地步,并在客户端应用程序的 GCMIntentService 类中的 onMessage 事件中记录消息的内容。但是,我在设备上没有看到收到消息的任何视觉指示。我希望消息会出现在手机的下拉通知列表中,就像在 iPhone 上一样。这必须手动编码吗?还有一种通用的方法来显示消息,而不管当前哪个活动处于活动状态,以及应用程序是否在后台空闲?任何帮助表示赞赏。

4

2 回答 2

7

此代码将在屏幕顶部的 android 系统栏中生成通知。此代码将创建一个新意图,在单击顶部栏中的通知后将用户定向到“Home.class”。如果您希望它根据当前活动执行特定操作,您可以将广播请求从 GCMIntentService 发送到您的其他活动。

Intent notificationIntent=new Intent(context, Home.class);
generateNotification(context, message, notificationIntent);

private static void generateNotification(Context context, String message, Intent notificationIntent) {
    int icon = R.drawable.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);

    // set intent so it does not start a new activity
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
            Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent intent =PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    notification.setLatestEventInfo(context, title, message, intent);
    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    notificationManager.notify(0, notification);
}

请注意,此示例使用 R.drawable 和 R.String 中的资源,这些资源需要存在才能工作,但它应该给你这个想法。有关状态通知的更多信息,请参见http://developer.android.com/guide/topics/ui/notifiers/index.html以及有关广播接收器的信息。http://developer.android.com/reference/android/content/BroadcastReceiver.html

于 2012-09-18T18:34:30.717 回答
1

如果您使用 GcmListenerService,您可以使用此代码,将 sendNotification() 添加到您的 onMessageReceived

@Override
public void onMessageReceived(String from, Bundle data) {
        String message = data.getString("message");
        sendNotification(message);
}

private void sendNotification(String message) {
        Intent intent = new Intent(this, YOURCLASS.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
        PendingIntent.FLAG_ONE_SHOT);

        Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.ic_park_notification)
                .setContentTitle("Ppillo Message")
                .setContentText(message)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
    }
于 2016-02-19T11:24:22.430 回答