cocos2d-x中本地推送消息
作者:HU
转载请注明,原文链接:http://www.cnblogs.com/xioapingguo/p/4038277.html
IOS下很简单:
添加一条推送
void PushNotificationIOS::addNoticfy(std::string title,std::string content,unsigned int delalt,std::string key,unsigned int repeatTime)
{ // 创建一个本地推送//
UILocalNotification *notification = [[[UILocalNotification alloc] init] autorelease];
//设置delalt秒之后//
NSDate *pushDate = [NSDate dateWithTimeIntervalSinceNow:delalt];
if (notification != nil)
{
// 设置推送时间//
notification.fireDate = pushDate;
// 设置时区//
notification.timeZone = [NSTimeZone defaultTimeZone];
// 设置重复间隔//
if (repeatTime!=)
{
notification.repeatInterval = kCFCalendarUnitDay;
}
else
{
notification.repeatInterval = ;
}
// 推送声音//
notification.soundName = UILocalNotificationDefaultSoundName;
// 推送内容//
notification.alertBody = [NSString stringWithUTF8String: content.c_str()];
//显示在icon上的红色圈中的数子//
notification.applicationIconBadgeNumber = ;
//设置userinfo 方便在之后需要撤销的时候使用//
NSDictionary *info = [NSDictionary dictionaryWithObject:[NSString stringWithUTF8String: key.c_str()] forKey:@"DDNoticfykey"];
notification.userInfo = info;
//添加推送到UIApplication//
UIApplication *app = [UIApplication sharedApplication];
[app scheduleLocalNotification:notification]; } }
删除一条推送
void PushNotificationIOS::removeNoticfy(std::string key)
{
// 获得 UIApplication
UIApplication *app = [UIApplication sharedApplication];
app.applicationIconBadgeNumber = ;
//获取本地推送数组
NSArray *localArray = [app scheduledLocalNotifications];
//声明本地通知对象
UILocalNotification *localNotification = nil; if (localArray)
{
for (UILocalNotification *noti in localArray)
{
NSDictionary *dict = noti.userInfo;
if (dict) {
NSString* keys = [[[NSString alloc] initWithUTF8String: key.c_str()] autorelease];
NSString* inKey = [dict objectForKey:@"DDNoticfykey"]; if ([inKey isEqualToString:keys])
{
NSLog(@"remove1 %@,%@",keys,inKey);
[app cancelLocalNotification: noti];
if (localNotification){
[localNotification release];
localNotification = nil;
}
localNotification = [noti retain];
break;
} }
} //判断是否找到已经存在的相同key的推送
if (!localNotification) {
//不存在初始化
localNotification = [[UILocalNotification alloc] init];
} if (localNotification) {
//不推送 取消推送
[app cancelLocalNotification:localNotification];
[localNotification release];
return;
}
}
}
android下没有系统直接延时本地推送的功能,我们使用AlarmManager闹钟服务,和BroadcastReceiver广播来做一个本地推送
首先建一个Cocos2dxAlarmManager类
package org.cocos2dx.lib; import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; import android.app.AlarmManager;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log; public class Cocos2dxAlarmManager {
public static void alarmNotify(Context Context, String jsonString)
{
AlarmManager localAlarmManager = (AlarmManager)Context.getSystemService(android.content.Context.ALARM_SERVICE); String countTimeType = "rtc";
long intervalAtMillis = 86400;
long triggerAtMillis = System.currentTimeMillis() / 1000L;
int type = AlarmManager.RTC;
PendingIntent localPendingIntent;
try
{
JSONObject localJSONObject = new JSONObject(jsonString);
String packageName = localJSONObject.optString("packageName",Context.getPackageName());
String ticker = localJSONObject.optString("ticker", "null");
String title = localJSONObject.optString("title", "null");
String text = localJSONObject.optString("text", "null");
String str1 = localJSONObject.optString("tag", "noonce");
triggerAtMillis = localJSONObject.optLong("triggerAtMillis", System.currentTimeMillis() / 1000L);
long triggerOffset = localJSONObject.optLong("triggerOffset", 0L);
intervalAtMillis = localJSONObject.optLong("intervalAtMillis", 0);
countTimeType = localJSONObject.optString("countTimeType", "rtc");
triggerAtMillis *= 1000L;
long triggerOffsetMillis = triggerOffset * 1000L;
intervalAtMillis *= 1000L;
int id = localJSONObject.optInt("id", 0); if (triggerOffsetMillis > 0L)
triggerAtMillis += triggerOffsetMillis;
// if (!countTimeType.equals("rtc"))
// return; Intent localIntent = new Intent("game_receiver");//广播名,时间到了就会发送game_receiver
Bundle localBundle = new Bundle();
localBundle.putInt("flag", id);
localBundle.putString("packageName", packageName);
localBundle.putString("ticker", ticker);
localBundle.putString("title", title);
localBundle.putString("text", text);
localIntent.putExtras(localBundle);
localPendingIntent = PendingIntent.getBroadcast(Context, id, localIntent, PendingIntent.FLAG_UPDATE_CURRENT);
if (!str1.equals("once"))
{
localAlarmManager.set(type, triggerAtMillis, localPendingIntent);
}
else
{
localAlarmManager.setRepeating(type , triggerAtMillis, intervalAtMillis, localPendingIntent);
} // Intent localIntent1 = new Intent("game_receiver");
// PendingIntent localPendingIntent1 = PendingIntent.getBroadcast(Context, 0, localIntent, 0);
long sss = System.currentTimeMillis();
sss += 10000;
Log.v("MyService","Cocos2dxAlarmManager "+(System.currentTimeMillis()-triggerAtMillis)); // localAlarmManager.set(AlarmManager.RTC_WAKEUP , triggerAtMillis, localPendingIntent);
// localAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP , System.currentTimeMillis(), 5000, localPendingIntent);
}
catch (JSONException localJSONException)
{
// localJSONException.printStackTrace();
//
// if (countTimeType.equals("rtc_wakeup"))
// type = AlarmManager.RTC_WAKEUP;
// if (countTimeType.equals("elapsed_wakeup"))
// type = AlarmManager.ELAPSED_REALTIME_WAKEUP;
// type = AlarmManager.ELAPSED_REALTIME;
//
// localAlarmManager.setRepeating(type, triggerAtMillis, intervalAtMillis, localPendingIntent);
}
} public static void cancelNotify(Context paramContext, int paramInt)
{
NotificationManager localNotificationManager = (NotificationManager)paramContext.getSystemService("notification");
localNotificationManager.cancel(paramInt); AlarmManager localAlarmManager = (AlarmManager)paramContext.getSystemService(android.content.Context.ALARM_SERVICE);
PendingIntent localPendingIntent = PendingIntent.getBroadcast(paramContext, paramInt, new Intent("game_receiver"), PendingIntent.FLAG_NO_CREATE);
if (localPendingIntent == null)
return;
localAlarmManager.cancel(localPendingIntent);
} public static void cancelNotify(Context paramContext, String paramString)
{
AlarmManager localAlarmManager = (AlarmManager)paramContext.getSystemService(android.content.Context.ALARM_SERVICE);
try
{
JSONArray localJSONArray = new JSONObject(paramString).optJSONArray("piids");
int i = 0;
if (i >= localJSONArray.length())
return;
PendingIntent localPendingIntent = PendingIntent.getBroadcast(paramContext, localJSONArray.getInt(i), new Intent("game_receiver"), PendingIntent.FLAG_NO_CREATE);
if (localPendingIntent != null)
localAlarmManager.cancel(localPendingIntent);
++i;
}
catch (JSONException localJSONException)
{
localJSONException.printStackTrace();
}
}
}
在Cocos2dxActivity.java中添加一个方法给调用者使用
public static void addNoticfy(String title,String content,int delalt,int key,int repeatTime)
{
JSONObject j = new JSONObject();
try {
j.put("ticker", content);
j.put("title", title);
j.put("text", content);
if(repeatTime<=0)
{
j.put("tag", "once");
}
else
{
j.put("intervalAtMillis", repeatTime);
}
j.put("triggerOffset", delalt);
j.put("id", key);
j.put("packageName", "com.xxx.cxxxx");//包名注意填
Cocos2dxAlarmManager.alarmNotify(instance, j.toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
再添加一个Cocos2dxBroadcastReceiver类用于接收广播
package org.cocos2dx.lib; import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log; public class Cocos2dxBroadcastReceiver extends BroadcastReceiver
{ @Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub if(intent.getAction().equals("game_receiver"))
{
Log.v("MyService","Cocos2dxPushService onReceive");
Bundle localBundle = intent.getExtras();
int flag = localBundle.getInt("flag");
String packageName = localBundle.getString("packageName");
String ticker = localBundle.getString("ticker");
String title = localBundle.getString("title");
String text = localBundle.getString("text");
int id = localBundle.getInt("id");
Log.v("MyService","Cocos2dxPushService onReceive2 "+packageName);
Cocos2dxNotification.doNotify(context, packageName, ticker, title, text,id);//开始本地推送
}
}
}
再添加一个推送消息类
package org.cocos2dx.lib; import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import android.util.Log; public class Cocos2dxNotification {
public static void doNotify(Context paramContext, String packageName, String ticker, String title, String text, int id)
{int icon = paramContext.getResources().getIdentifier("notification_icon", "drawable", paramContext.getPackageName()); NotificationManager localNotificationManager = (NotificationManager)paramContext.getSystemService("notification");
NotificationCompat.Builder localBuilder = new NotificationCompat.Builder(paramContext);
localBuilder.setSmallIcon(icon);
localBuilder.setTicker(ticker);
localBuilder.setContentTitle(title);
localBuilder.setContentText(text);
localBuilder.setAutoCancel(true);
try
{
Log.v("MyService",packageName);
Log.v("MyService",Class.forName(packageName).toString());
Intent localIntent = new Intent(paramContext, Class.forName(packageName));
localIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
localIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
localBuilder.setContentIntent(PendingIntent.getActivity(paramContext, 0, localIntent, PendingIntent.FLAG_ONE_SHOT));
Notification notfi =localBuilder.build();
notfi.defaults=Notification.DEFAULT_SOUND;
notfi.defaults |= Notification.DEFAULT_VIBRATE;
notfi.defaults|=Notification.DEFAULT_LIGHTS;
localNotificationManager.notify(id, notfi);
return;
}
catch (ClassNotFoundException localClassNotFoundException)
{
localClassNotFoundException.printStackTrace();
}
}
}
使用时只要使用Cocos2dxActivity.java中
public static void addNoticfy(String title,String content,int delalt,int key,int repeatTime)
方法就可以和IOS一样了。
cocos2d-x中本地推送消息的更多相关文章
- iOS -- 处理推送消息
简介 很多应用都会实现推送功能,我们可以集成第三方框架实现推送功能,比如: JPush推送:https://www.jpush.cn 个推:http://www.getui.com 下面来说说收到推送 ...
- iOS8推送消息的回复处理速度
iOS8我们有一个新的通知中心,我们有一个新的通报机制.当在屏幕的顶部仅需要接收一个推拉向下,你可以看到高速接口,天赋并不需要输入应用程序的操作.锁定屏幕,用于高速处理可以推动项目. 推送信息,再次提 ...
- iOS8推送消息的快速回复处理
http://blog.csdn.net/yujianxiang666/article/details/35260135 iOS8拥有了全新的通知中心,有全新的通知机制.当屏幕顶部收到推送时只需要往下 ...
- 本地推送UILocalNotification(转)
1.增加一个本地推送 //设置20秒之后 NSDate *date = [NSDate dateWithTimeIntervalSinceNow:]; //chuagjian一个本地推送 UILoca ...
- IOS中程序如何进行推送消息(本地推送,远程推送)
[1]-------------什么是推送消息? 我就以一张图解释------------ [2]-----------IOS程序中如何进行本地推送?----------- 2.1,先征求用户同意 1 ...
- IOS中程序如何进行推送消息(本地推送,远程推送)2(上)
未看过本地推送的,可以提前看一下本地推送. http://www.cnblogs.com/wolfhous/p/5135711.html =============================== ...
- IOS 本地通知推送消息
在现在的移动设备中,好多应用性的APP都用到了推送服务,但是有好多推送的内容,比如有的只是单纯的进行推送一个闹钟类型的,起了提醒作 用,有的则是推送的实质性的内容,这就分为推送的内容来区别用什么推送, ...
- SWIFT推送之本地推送(UILocalNotification)之二带按钮的消息
上一篇讲到的本地推送是普通的消息推送,本篇要讲一下带按钮动作的推送消息,先上个图瞅瞅: 继上一篇的内容进行小小的改动: 在didFinishLaunchingWithOptions方法内进行以下修改 ...
- iOS-推送,证书申请,本地推送
介绍一点点背景资料 众所周知,使用推送通知是一个很棒的.给应用添加实时消息通知的方式.这样做的结局是,开发者和用户之间,彼此永远保持着一种令人愉悦的亲密关系. 然而不幸的是,iOS的推送通知并非那么容 ...
随机推荐
- xp主机用VMware9和10安装Ubuntu12.04后无法进入图像界面
xp主机用VMware9和10安装Ubuntu12.04后无法进入图像界面 备注:虚拟机安装Ubuntu12.04 64位版本 刚开始我用VMware-workstation-full-8.0.3来安 ...
- Android开发之ADT导入Support Library
在工程中增加(例如 support-v4 Library) 在ADT中需要按照以下步骤: 1.右击当前工程,查找Properties 2.选择Java Build Path 3.选择Librarie ...
- Android开发之极光推送基本步骤
[转]:http://wyong.blog.51cto.com/1115465/1402842 两天在研究推送的问题,后来确定了用极光推送,本人将整个过程整理一下: 1.到极光官网注册账号:https ...
- 武汉北大青鸟解读2016年10大IT热门岗位
武汉北大青鸟解读2016年10大IT热门岗位 2016年1月5日 13:37 北大青鸟 这是IT从业者的辉煌时代,IT行业的失业率正处在历史的低点,而且有的岗位——例如网络和安全工程师以及软件开发人员 ...
- Jquery动画第二部分
效果图: →→→→→→ <%@ Page Language="C#" AutoEventWireup="true" CodeFile=" ...
- CSS基础深入之细说盒子模型
Html任何一个元素(element)都可以当成一个盒子(box)来看待,可以结合现实中的盒子来理解下文,下文其中一些单词应该是通俗易懂的需要记录的单词. 基本情况 每一个盒子都有一个内容区域(con ...
- wpa_supplicant是什么?
/************************************************************************ * wpa_supplicant是什么? * 声明: ...
- SharePoint 2010 master page 控件介绍(3) :页面主体内容
转:http://blog.csdn.net/lgm97/article/details/6409217 <!-- ===== 页面滚动区域开始 ====================== ...
- 在PowerDesigner中设计物理模型2——约束
唯一约束 唯一约束与创建唯一索引基本上是一回事,因为在创建唯一约束的时候,系统会创建对应的一个唯一索引,通过唯一索引来实现约束.不过唯一约束更直观的表达了对应列的唯一性,使得对应索引的目的更加清晰,所 ...
- Hadoop安装教程_单机/伪分布式配置
环境 本教程使用 CentOS 6.4 32位 作为系统环境,请自行安装系统(可参考使用VirtualBox安装CentOS).如果用的是 Ubuntu 系统,请查看相应的 Ubuntu安装Hadoo ...