Android CGM 收到推送通知后启动 Activity

Posted

技术标签:

【中文标题】Android CGM 收到推送通知后启动 Activity【英文标题】:Android CGM start Activity after receiving Push Notification 【发布时间】:2016-05-11 11:24:08 【问题描述】:

收到Push Notification后,我想在按下Notification时打开一个Àctivity

这是我的Services

public class GCMIntentService extends GcmListenerService 
@Override
public void onMessageReceived(String from, Bundle data) 
    String title = data.getString("title");
    String message = data.getString("message");

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle(title)
            .setContentText(message)
            .setStyle(new NotificationCompat.BigTextStyle().bigText(message))
            .setTicker(message)
            .setAutoCancel(true);

    mBuilder.setDefaults(Notification.DEFAULT_LIGHTS);
    mBuilder.setDefaults(Notification.DEFAULT_SOUND);
    mBuilder.setDefaults(Notification.DEFAULT_VIBRATE);


    Intent myIntent = new Intent(this, MyActivity.class);
    PendingIntent intent2 = PendingIntent.getBroadcast(this, 1, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    mBuilder.setContentIntent(intent2);

    notificationManager.notify(1, mBuilder.build());




public class GCMIDListenerService extends InstanceIDListenerService 
@Override
public void onTokenRefresh() 
    InstanceID instanceID = InstanceID.getInstance(this);
    String token;
    try 
        token = instanceID.getToken(Resources.getSystem().getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
     catch (IOException e) 
        e.printStackTrace();
    
    //TODO:send token to the server
  

我只是按照Google 文档完成了所有操作。我前段时间为另一个项目实现了该功能,但有点不同,我使用了我自己的“BroadcastReceiver”而不是Google 提供的“com.google.android.gms.gcm.GcmReceiver”。

这是我的Manifest

<application>

...

 <!-- GCM Push Notifications Config -->
    <receiver
        android:name="com.google.android.gms.gcm.GcmReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="gcm" />
        </intent-filter>
    </receiver>
    <service
        android:name=".push.GCMIntentService"
        android:exported="false" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        </intent-filter>
    </service>
    <service
        android:name=".push.GCMIDListenerService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.android.gms.iid.InstanceID" />
        </intent-filter>
    </service>


</application>

有什么想法吗?我错过了什么吗?

这里有一些我遵循的文档:

Google official documentation

CGM tutorial By Dustin Rothwell

当然,我在*** 进行了很多研究。

谢谢!

【问题讨论】:

【参考方案1】:

你犯了一个小错误。您正在为打开活动编写此代码。

PendingIntent intent2 = PendingIntent.getBroadcast(this, 1, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(intent2);

当您想要打开活动时,您需要使用getActivity 方法而不是getBroadcast 方法来创建待处理意图。

希望这会有所帮助。

【讨论】:

太棒了!非常感谢:)

以上是关于Android CGM 收到推送通知后启动 Activity的主要内容,如果未能解决你的问题,请参考以下文章

如何在收到推送通知后让 android 应用程序在后台启动,以便它可以从服务器获取数据?

Parse.com 推送通知延迟或仅在 Android 应用重启后

Android实现点击通知栏后,先启动应用再打开目标Activity ,极光推送等推送的也可以参考一下(转)

收到推送通知后,Whatsapp 服务在强制停止后重新启动

Android - 收到推送通知 FCM 后,如何在我的 Activity 中更新数据或 UI?

如何从推送通知启动后台运行的 android 应用程序?