我是靠谱客的博主 勤奋月饼,最近开发中收集的这篇文章主要介绍个推实类demo,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本博客主要实现的功能主要有:
1、个推推送透传消息的实现
2、消息在通知栏中显示
3、点击通知栏进入相应页面
4、工程目录结构介绍及效果展示
**

一、个推推送透传消息的实现

**
在个推官网中已经有很详细的描述而且也有demo下载地址,在这里就不啰嗦了,下面是个推官网给出的Eclipse集成步骤
http://docs.getui.com/mobile/android/eclipse/
判断自己是否集成成功的标记是,看能否获取到 clientid,下面是获取clientid 的方法。

//获取Clientid
String clientid = PushManager.getInstance().getClientid(context);

**

二、在通知栏中显示透传过来的消息

**
首先,我们要找到在demo中透传过来的消息,有一个PushDemoReceiver


case PushConsts.GET_MSG_DATA:
// 获取透传数据
// String appid = bundle.getString("appid");
byte[] payload = bundle.getByteArray("payload");

payload 就是透传过来的消息。
其次,我们要显示到通知栏中,下面是主要的代码片段:

/**
*
* @param context
上下文
* @param data
穿透过来的json数据
*/
private void showNotification(Context context, String data) {
Intent notiIntent = new Intent(context, NotificationReceiver.class);//NotificationReceiver判断app进程是否存活
PendingIntent broadcast = PendingIntent.getBroadcast(context, 0, notiIntent, PendingIntent.FLAG_CANCEL_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setContentTitle("Jeffery个推")//
.setContentText(String.valueOf(data))//
.setContentIntent(broadcast)//
.setAutoCancel(true)//设置点击后消失
.setSmallIcon(R.drawable.ic_launcher);
NotificationManager notificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(2, builder.build());
}

有一个博客具体描述了通知栏的一些属性,大家可以参考一下
http://blog.csdn.net/vipzjyno1/article/details/25248021/

三、点击通知栏进入相应页面

要分两种情况:app杀死和app已启动。
1、app杀死
如果app进程已经被杀死,先重新启动app,将DetailActivity的启动参数传入Intent中,参数经过SplashActivity传入MainActivity,此时app的初始化已经完成,在MainActivity中就可以根据传入 参数跳转到DetailActivity中去了
2、app已启动
如果存活的话,就直接启动DetailActivity,但要考虑一种情况,就是app的进程虽然仍然在,但Task栈已经空了,比如用户点击Back键退出应用,但进程还没有被系统回收,如果直接启动消息详情页面,再按back就回不到MainActivity

解决办法:将MainAtivity的launchMode设置成SingleTask, 或者在下面flag中加上Intent.FLAG_CLEAR_TOP,如果Task栈中有MainActivity的实例,就会把它移到栈顶,把在它之上的Activity都清理出栈,如果Task栈不存在MainActivity实例,则在栈顶创建
具体代码实现:

package com.jeffery.getui;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
//判断app进程是否存活
public class NotificationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 程序未启动
if (Constans.THREE == SystemUtils.getAppSatus(context, Constans.PAGENAME)) {
//如果app进程已经被杀死,先重新启动app,将DetailActivity的启动参数传入Intent中,参数经过
//SplashActivity传入MainActivity,此时app的初始化已经完成,在MainActivity中就可以根据传入

//参数跳转到DetailActivity中去了
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(Constans.PAGENAME);
launchIntent.setFlags(
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
Bundle bundle = new Bundle();
bundle.putBoolean(Constans.KILL, true);
launchIntent.putExtra(Constans.CONTENT, bundle);//将信息传给SpalishActivity
context.startActivity(launchIntent);
} else {// 程序启动
//如果存活的话,就直接启动DetailActivity,但要考虑一种情况,就是app的进程虽然仍然在
//但Task栈已经空了,比如用户点击Back键退出应用,但进程还没有被系统回收,如果直接启动
//DetailActivity,再按Back键就不会返回MainActivity了。所以在启动
//DetailActivity前,要先启动MainActivity。
Intent mainIntent = new Intent(context,MainActivity.class);
//将MainAtivity的launchMode设置成SingleTask, 或者在下面flag中加上Intent.FLAG_CLEAR_TOP,
//如果Task栈中有MainActivity的实例,就会把它移到栈顶,把在它之上的Activity都清理出栈,
//如果Task栈不存在MainActivity实例,则在栈顶创建
mainIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Intent detailIntent = new Intent(context,DetailActivity.class);
Intent[] intents = {mainIntent,detailIntent};
context.startActivities(intents);
}
}
}

四、工程目录结构介绍

1、下面是工程结构及描述
这里写图片描述
2、真机运行效果展示
splashactivity
mainactivity
detailactivity
通知栏消失效果
3、完整demo的下载地址:
http://download.csdn.net/detail/u011005173/9523538

最后

以上就是勤奋月饼为你收集整理的个推实类demo的全部内容,希望文章能够帮你解决个推实类demo所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部