use*_*104 7 notifications android push-notification android-intent android-notifications
目前我正在研究GCM(谷歌云消息),它允许用户将消息推送到用户设备.我想达到以下要求:
如果用户已经输入应用程序,请忽略它
如果用户尚未进入应用程序,请单击通知以进入应用程序
我的应用程序的工作流程是:
处理通知的代码
private void sendNotification(String msg) {
mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
String notifyMsg = "";
JSONTokener tokener = new JSONTokener(msg);
if (tokener != null) {
try {
notifyMsg = new JSONObject(tokener).getString("msg");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Intent myintent = new Intent(this, WelcomePageActivity.class);
myintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, myintent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(getResources().getString(R.string.notification_title))
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(notifyMsg))
.setContentText(notifyMsg)
.setContentIntent(contentIntent);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}
Run Code Online (Sandbox Code Playgroud)
问题是如果我使用WelcomePageActivity类,如果我在主页面,它将创建一个新的活动,我如何调整代码以满足我的要求?
谢谢
在您AndroidManifest.xml的身份中,使用标志定义WelcomePageActivity android:launchMode="singleTop".从这个标志的定义:
还可以创建"singleTop"活动的新实例来处理新意图.但是,如果目标任务已经在其堆栈顶部具有活动的现有实例,则该实例将接收新意图(在onNewIntent()调用中); 未创建新实例.
因此,使用此标志,您的活动将不会再次创建,而是在onNewIntent()函数中接收一个调用,其中包含您用于为通知创建PendingIntent的Intent.您可以覆盖此功能,并使用intent传递活动新信息.
对于
1.如果用户已经输入应用程序,请忽略它:
在onReceive(),检查您的应用程序是否正在运行,不要通知.
可以通过以下方式检查:
ActivityManager activityManager =(ActivityManager)gpsService.this.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> serviceList= activityManager.getRunningServices(Integer.MAX_VALUE);
if((serviceList.size() > 0)) {
boolean found = false;
for(int i = 0; i < serviceList.size(); i++) {
RunningServiceInfo serviceInfo = serviceList.get(i);
ComponentName serviceName = serviceInfo.service;
if(serviceName.getClassName().equals("Packagename.ActivityOrServiceName")) {
//Your service or activity is running
break;
}
}
Run Code Online (Sandbox Code Playgroud)
关于您的应用程序的工作流程,我建议您检查是否需要每次都下载数据.可以保存它或仅在需要时更新/下载,其余流程按原样工作.
| 归档时间: |
|
| 查看次数: |
1601 次 |
| 最近记录: |