展会信息港展会大全

cocos2d-x中本地推送消息,cocos2d-x推送消息
来源:互联网   发布日期:2015-09-28 15:40:10   浏览:5224次  

导读: cocos2d-x中本地推送消息,cocos2d-x推送消息 作者:HU 转载请注明,原文链接:http://www.cnblogs.com/xioapingguo/p/4038277.html...

cocos2d-x中本地推送消息,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!=0)

{

notification.repeatInterval = kCFCalendarUnitDay;

}

else

{

notification.repeatInterval = 0;

}

// 推送声音//

notification.soundName = UILocalNotificationDefaultSoundName;

// 推送内容//

notification.alertBody = [NSString stringWithUTF8String: content.c_str()];

//显示在icon上的红色圈中的数子//

notification.applicationIconBadgeNumber = 1;

//设置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 = 0;

//获取本地推送数组

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一样了。

百度贴吧消息推送

你要再一个大型贴吧里 级别比较高 发的帖子是原创 有新意很难得。

赞助本站

人工智能实验室

相关热词: android开发 应用开发

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港