我在Android中使用推送通知。当我收到推送通知并点击它时,它会根据需要启动一个活动,但如果此活动已经打开,则没有任何事情发生,活动会保留旧数据。
的AndroidManifest.xml
<activity
android:name=".Detail"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/title_activity_detail"
android:launchMode="singleTop"
android:parentActivityName=".Home"
android:theme="@style/Theme.AppCompat.Light.DarkActionBar" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="ma.via.marocagenda.Home" />
</activity>
GCMIntentService.java
public class GCMIntentService extends GCMBaseIntentService {
...
private static void generateNotification(Context context, String message) {
//int icon = R.drawable.abc_ic_go;
int icon = R.drawable.ic_launcher;
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);
Intent notificationIntent = new Intent(context, Detail.class);
// put extra for details
notificationIntent.putExtra("id", VAL_TAG_ID);
notificationIntent.putExtra("titre", VAL_TAG_TITRE);
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
notification.defaults |= Notification.DEFAULT_LIGHTS;
notificationIntent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK );
//PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, title, message, intent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, notification);
}
什么可能是错的?
答案 0 :(得分:1)
您可以在活动中覆盖onNewIntent()
,以从通知中获取最新意图。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (intent.hasExtra("key")){
//do your Stuff
}
}
答案 1 :(得分:0)
每当推送通知到达时,您都可以使用服务中的本地广播。
如何使用本地广播,请阅读https://stackoverflow.com/a/8875292/826657
让您的活动注册此广播操作,并在收到推送通知时,从onReceive()
更新活动。
此外,使用ActivityManager更具体,您可以检查您是否活动在顶部,如果是,则发送广播,否则只显示通知。
请阅读此处了解如何查找当前的前台活动。 https://stackoverflow.com/a/4753333/826657