为GCM通知定制化UI界面

4

GCM文档中给出了以下内容:

GCM不提供任何内置用户界面或其他处理消息数据的功能。GCM只是将接收到的原始消息数据直接传递给Android应用程序,由应用程序完全控制如何处理它。例如,应用程序可以发布通知、显示自定义用户界面或静默同步数据。

但没有关于如何创建自定义通知UI的说明。

如何创建自定义UI,比如一个带有2个按钮等的小对话框,用于GCM通知。就像Gmail在状态栏通知中提供归档或删除邮件的选项一样。

代码:

public void onReceive(Context context, Intent intent) {
    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
    ctx = context;
    String messageType = gcm.getMessageType(intent);
    if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
    } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED
            .equals(messageType)) {
    } else {
        sendNotification(intent.getExtras().getString("msg"));
    }
    setResultCode(Activity.RESULT_OK);
}

private void sendNotification(String msg) {
    mNotificationManager = (NotificationManager) ctx
            .getSystemService(Context.NOTIFICATION_SERVICE);

    PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0,
            new Intent(ctx, NotificationsActivity.class), 0);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            ctx).setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle("GCM Notification")
            .setContentText(msg);

    mBuilder.setContentIntent(contentIntent);
    Notification mNotification = mBuilder.getNotification();

    SharedPreferences sp = ctx.getSharedPreferences(
            GCMDemoActivity.GCM_NOTIF_PREF, Context.MODE_PRIVATE);
    long diff = System.currentTimeMillis()
            - sp.getLong("last_gcm_timestamp", 0);
    if (diff > TWO_MINUTES) {
        mNotification.defaults = Notification.DEFAULT_ALL;
        SharedPreferences.Editor editor = sp.edit();
        editor.putLong("last_gcm_timestamp", System.currentTimeMillis());
        editor.commit();
    }

    mNotificationManager.notify(NOTIFICATION_ID, mNotification);
}

谢谢


你的 GCMIntentService 里面有什么? - Raptor
我没有使用任何IntentService,我是在BroadcastReceiveronReceive()方法中构建通知。 - user1537779
糟糕,我的错。我应该询问onReceive()函数的内容。 - Raptor
你可以创建一个带有自定义布局的 DialogActivity,在收到任何新消息时,创建该活动并显示它。这将显示一个带有对话框的消息弹出窗口。 - Chintan Rathod
@ChintanRathod 这听起来像是一个广告对话框,会要求安装一些应用程序,如果我没记错的话。但那看起来不像是通知。我能不能在状态栏中做类似的事情呢? - user1537779
你可以……为什么不呢?我认为你可以创建一个视图来处理所有通知,就像我们在网站顶部展示的那样,它们带有滚动字幕效果。你可以像那样显示。你需要为此创建一个基础活动,其中包含底部面板的基础布局。 - Chintan Rathod
2个回答

5
但是并没有关于如何创建自定义通知UI的内容。
因为这与GCM无关。
如何创建类似于具有2个按钮的小对话框等自定义UI,用于GCM通知。就像Gmail在状态栏通知中提供了将邮件归档或删除的选项。
这是一个扩展或“大”的通知,就像文档中所介绍的那样。

另外一件事是文本不会出现在顶部状态栏上,只有图标会出现。我见过一些应用程序的通知消息会在顶部停留1-2秒钟,而图标则保持不变。 - user1537779
@user1537779:那是跑马灯文本,你可以通过 setTicker() 方法进行设置。 - CommonsWare

0
在 GCMIntentService.java 类中的 generateNotification() 方法中,当接收到 GCM 通知时,您可以创建一个具有两个按钮的对话框。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接