6

我正在尝试在我的 android 应用程序上实现推送通知。因此,没有比 Google 开发者页面更好的起点了。

我正在尝试在这里学习本教程:GCM Demo App。教程建议使用通过 SDK 管理器提供的示例代码。这样做并尝试发送推送通知后,当应用程序运行时,我在屏幕上看到正在写入的新推送已经到来。

但是,当应用程序处于后台或未运行时,我不会收到推送通知。如果我打开应用程序,消息会再次显示在屏幕上。但是我从来没有收到任何带有弹出窗口和声音的通知形式的东西。

我是否必须在android中手动执行此操作?我认为它类似于 iOS 平台负责向您显示通知。

有什么想法可以实现吗?

4

2 回答 2

5

但是我从来没有收到任何带有弹出窗口和声音的通知形式的东西。

触发通知时,可以将声音编程到代码中。用这样的话说。

Notification notification = new Notification(icon, tickerText, when);
notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

但是,当应用程序处于后台或未运行时,我不会收到推送通知

我是否必须在android中手动执行此操作?我认为它类似于 iOS 平台负责向您显示通知。

您的应用始终会收到 GCM 数据(推送通知)。如何处理这些数据取决于您。GCM 意图服务负责向您提供数据,仅此而已。您将需要使用通知服务向用户显示适当的通知。

这种方法有优点/缺点。当您收到推送通知时,应用程序代码将在 android 上运行,而在 iPhone 上则不然。您还可以灵活地根据推送通知的类型进行静默更新或通知用户。

当您的应用启动时,使用发件人 ID 注册您的设备,您应该会收到预期的通知。所有推送通知都将传递到protected void onMessage(Context context, Intent intent)您选择的 GCMIntentService 上的此方法。

于 2013-03-26T09:47:18.753 回答
3

尝试取消注册并再次注册您的设备。在 DemoActivity.java 中放

final String regId = GCMRegistrar.getRegistrationId(this);
        GCMRegistrar.unregister(this);

GCMRegistrar.unregister(this);然后,在第二次启动时移除 。

更新

应用程序中的通知:

创建类

public class DemoApplication extends Application {

    private class NotifyReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
              Toast.makeText(context, "RECEIVE MESSAGE", Toast.LENGTH_SHORT).show();
        }
    }

    private NotifyReceiver notifyReceiver = new NotifyReceiver();

    @Override
    public void onCreate() {
        registerReceiver(notifyReceiver, new IntentFilter("GCM_MESSAGE"));
        super.onCreate();
    }

    @Override
    public void onTerminate() {
        unregisterReceiver(notifyReceiver);
        super.onTerminate();
    }
}

然后放

<application
           android:name=".DemoApplication"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" > 

在 AndroidManifest.xml 中发送广播

  @Override
    protected void onMessage(Context context, Intent intent) {
        Log.i(TAG, "Received message");
        String message = getString(R.string.gcm_message);
        displayMessage(context, message);
      context.sendBroadcast(new Intent("GCM_MESSAGE"));
        // notifies user
        generateNotification(context, message);
    }

作为替代情况,您可以在清单、活动或前台服务中注册广播接收器

于 2013-03-26T09:41:11.527 回答