个推集成的那点事

1、先把官方的demo搞进你的项目。

2、广播注册,记得改包名。

3、cid获取:cid = PushManager.getInstance().getClientid(this);

4、由于android的后台机制问题,个推暂时给客户端的消息区分不了是在线消息还是离线消息。

那么问题来了:你可能在一段时间内app由离线转在线时,音频会啪啪啪响个不停,那叫一个恶心啊。由于个推不给客户端success_offline字段,于是我就造个假的。

开个线程,先让他睡一会,一般手机大概11秒能接收50个透传消息,具体数字记不清了。当睡醒了,全局变量TAG赋一个新值,这个新值做为透传里面是否播放音频的判断条件,默认TAG=1,睡醒改为2。这就避免了刚进程序音频一直叫个不停的问题。如果你们app比较火的话,sleep的时间可以设置长一点,至于多长自己把握。这也有负面影响:就是在sleep时间段内,虽然cid是在线,正常的透传也是没有音频播放的。这个问题至于怎么从根本上解决我没有思路。

5、个推的透传只负责发送消息,不做任何处理。想有通知,自己写,有播放音频需求,自己写。

1)播放录音:

MediaPlayer player=MediaPlayer.create(context,R.raw.video);
player.start();

在res下新建一个raw文件夹,把音频文件放进去,直接饮用就可以了。

2)通知:

接受到透传消息,在方法内:

String broadcastIntent= "loadorder";//自己随意些
Intent intent = new Intent(broadcastIntent);
context.sendBroadcast(intent);

然后在合适的地方接受广播,自定义处理就好了,通知自己想怎么设计就怎么设计。。。

接受广播:

oncreate:

this.context = this;
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

broadcastReceiver = new TestReceiver();
IntentFilter filter = new IntentFilter("loadorder");
registerReceiver(broadcastReceiver, filter);

-----------------------------分割线-----------------------------------------

public class TestReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if (intent.getAction().equals("loadorder")) {
PokerHallActivity.getNotification();
loadOrder();
}
}
}

static Context context;
public static NotificationManager mNotificationManager;
public Notification mNotification;
static NotificationCompat.Builder mBuilder;
public static final int NOTIFY_ID = 0;
public static void getNotification() {
try {
mBuilder = new NotificationCompat.Builder(context);
mBuilder.setContentIntent(
getDefalutIntent(Notification.FLAG_AUTO_CANCEL))
.setWhen(System.currentTimeMillis())
.setPriority(Notification.PRIORITY_DEFAULT)
.setOngoing(false).setSmallIcon(R.drawable.slogo);
mBuilder.setAutoCancel(true).setContentTitle("
XXX")
.setContentText("
xxxxxxxx");
Intent resultIntent = new Intent(context, PokerHallActivity.class);
resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(pendingIntent);
mNotificationManager.notify(NOTIFY_ID, mBuilder.build());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public static PendingIntent getDefalutIntent(int flags) {
PendingIntent pendingIntent = PendingIntent.getActivity(context, 1,
new Intent(), flags);
return pendingIntent;
}

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
this.unregisterReceiver(broadcastReceiver);
}

--------------------------------------------------------------------------------------------------------------

end!

你可能感兴趣的:(android)