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!