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