1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > android 自定义推送布局_Android之极光推送发送自定义消息

android 自定义推送布局_Android之极光推送发送自定义消息

时间:2020-02-06 18:37:23

相关推荐

android 自定义推送布局_Android之极光推送发送自定义消息

Android端实现主要代码:

import java.io.IOException;

import java.io.InputStream;

import .HttpURLConnection;

import .MalformedURLException;

import .URL;

import org.json.JSONException;

import org.json.JSONObject;

import android.annotation.SuppressLint;

import android.app.Notification;

import android.app.NotificationManager;

import android.app.PendingIntent;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.support.v4.app.NotificationCompat;

import com.mine.xinlangapp.R;

import com.mine.xinlangapp.activity.BaseActivity;

import cn.jpush.android.api.JPushInterface;

/**

* 自定义接收器

*

* 如果不定义这个 Receiver,则:

* 1) 默认用户会打开主界面

* 2) 接收不到自定义消息

*/

public class MyReceiver extends BroadcastReceiver {

private Bitmap bitmap = null;

private NotificationManager notifyManager = null;

private NotificationCompat.Builder notifyBuilder = null;

private Notification notification = null;

private String url = "";

@SuppressLint("HandlerLeak")

private Handler handler = new Handler(){

@Override

public void handleMessage(Message msg){

if(bitmap!=null){

notifyBuilder.setLargeIcon(bitmap);

}else{

notifyBuilder.setSmallIcon(R.drawable.sina);

}

notification = notifyBuilder.build();

notification.defaults |= Notification.DEFAULT_SOUND;

notification.defaults |= Notification.DEFAULT_VIBRATE;

notifyManager.notify(1000, notification);

}

};

@SuppressLint("InflateParams")

@Override

public void onReceive(Context context, Intent intent) {

Bundle bundle = intent.getExtras();

/*

// 自定义样式放在init()之后.

CustomPushNotificationBuilder builder=new CustomPushNotificationBuilder(

context.getApplicationContext(),

R.layout.customer_notitfication_layout,

R.id.icon, R.id.title, R.id.text);

builder.layoutIconDrawable=R.drawable.menu_home; //下拉状态时显示的通知图标.

builder.layout = R.layout.customer_notitfication_layout;

JPushInterface.setPushNotificationBuilder(2, builder);

*/

if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {

/*

//接收到推送下来的自定义消息,开启服务执行耗时的操作

Intent i = new Intent(context, MyService.class);

i.putExtras(bundle);

context.startService(i);

*/

processCustomMessage(context, bundle);

}else if(JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())){

}else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {

Intent i = new Intent(context, BaseActivity.class);

bundle.putBoolean("push", true);

i.putExtras(bundle);

//i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );

context.startActivity(i);

}

}

private void processCustomMessage(Context context, Bundle bundle){

notifyManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

notifyBuilder = new NotificationCompat.Builder(context);

String title = bundle.getString(JPushInterface.EXTRA_TITLE);

String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);

String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);

//自定义信息: 获取

if (extras != null) {

try {

JSONObject object = new JSONObject(extras);

url = object.optString("src");

} catch (JSONException e) {

e.printStackTrace();

}

}

Intent i = new Intent(context, BaseActivity.class);

bundle.putBoolean("push", true);

i.putExtras(bundle);

PendingIntent pi = PendingIntent.getActivity(context, 1000, i, PendingIntent.FLAG_UPDATE_CURRENT);

notifyBuilder.setContentTitle(title);

notifyBuilder.setContentText(message);

notifyBuilder.setContentIntent(pi);

notifyBuilder.setAutoCancel(true);

new Thread(new Runnable() {

@Override

public void run() {

bitmap = returnBitMap(url);

handler.sendEmptyMessage(1);

}

}).start();

handler.sendEmptyMessage(1); //这里要先发送一次,因为onReceive方法实现不可以超过10秒,获取图片是耗时的,然而Notification没有图片通知是发送不了的。

}

//以Bitmap的方式获取一张图片

public Bitmap returnBitMap(String url){

URL myFileUrl = null;

Bitmap bitmap = null;

try{

myFileUrl = new URL(url);

}catch(MalformedURLException e){

e.printStackTrace();

}

try{

HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();

conn.setDoInput(true);

conn.connect();

InputStream is = conn.getInputStream();

bitmap = BitmapFactory.decodeStream(is);

is.close();

}catch(IOException e){

e.printStackTrace();

}

return bitmap;

}

}

服务器端java代码:

import java.util.HashMap;

import java.util.Map;

import java.util.Timer;

import java.util.TimerTask;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;

import cn.jpush.api.ErrorCodeEnum;

import cn.jpush.api.JPushClient;

import cn.jpush.api.MessageResult;

public class JPushClientExample {

private static final String appKey ="43bbac097a385c25c157e385";//必填,例如43bbac097a385c25c157e385

private static final String masterSecret = "90ac96cf260c77e64ccb";//"90ac96cf260c77e64ccb";//必填,每个应用都对应一个masterSecret

private static JPushClient jpush = null;

/**

* 保存离线的时长。秒为单位。最多支持10天(864000秒)。

* 0 表示该消息不保存离线。即:用户在线马上发出,当前不在线用户将不会收到此消息。

* 此参数不设置则表示默认,默认为保存1天的离线消息(86400秒)。

*/

private static long timeToLive = 60 * 60 * 24;

private static String top_href = "";

//public static void main(String[] args) {

public void main(){

/*

* Example1: 初始化,默认发送给android和ios,同时设置离线消息存活时间

* jpush = new JPushClient(masterSecret, appKey, timeToLive);

*/

/*

* Example2: 只发送给android

* jpush = new JPushClient(masterSecret, appKey, DeviceEnum.Android);

*/

/*

* Example3: 只发送给IOS

* jpush = new JPushClient(masterSecret, appKey, DeviceEnum.IOS);

*/

/*

* Example4: 只发送给android,同时设置离线消息存活时间

* jpush = new JPushClient(masterSecret, appKey, timeToLive, DeviceEnum.Android);

*/

jpush = new JPushClient(masterSecret, appKey, timeToLive);

/*

* 是否启用ssl安全连接, 可选

* 参数:启用true, 禁用false,默认为非ssl连接

*/

//jpush.setEnableSSL(true);

Timer timer = new Timer();

//在1秒后执行此任务,每次间隔半小时,如果传递一个Data参数,就可以在某个固定的时间执行这个任务

timer.schedule(new MyTask(), 1000, 1800*1000);

}

private static class MyTask extends TimerTask{

@Override

public void run() {

Map map = getNews();

String href = map.get("href");

if(!top_href.equals(href)){ //判断与上次发送的是否相同,不相同就推送

top_href = href;

//测试发送消息或者通知

testSend(map);

}

}

}

private static Map getNews(){

Document doc = null;

Map map = new HashMap();

try {

doc = Jsoup.connect("/").get();

Elements ListDiv = doc.getElementsByAttributeValue("class","carditems");

for (int i = 0; i

Element a = ListDiv.select("a").get(i);

String href = a.attr("href");

Element dl = ListDiv.select("dl").get(i);

Element dd = dl.select("dd").get(0);

Elements dt = dl.getElementsByTag("img");

Elements h3 = dd.select("h3"); //标题

Elements h4 = dd.select("h4");//内容

String title = h3.text();

String fu_title = h4.text();

String url = dt.attr("src"); // 图片链接

if(fu_title!=null && !fu_title.equals("")){

map.put("src", url);

map.put("title", title);

map.put("fu_title", fu_title);

map.put("href", href);

break;

}

}

} catch (Exception e) {

e.printStackTrace();

}

return map;

}

private static void testSend(Map map) {

// 在实际业务中,建议 sendNo 是一个你自己的业务可以处理的一个自增数字。

// 除非需要覆盖,请确保不要重复使用。详情请参考 API 文档相关说明。

int sendNo = getRandomSendNo();

//String msgTitle = "+;//jpush\"\"";

//String msgContent = "\\&;w\"\"a--【\npush】";

String href = map.get("href");

String msgTitle = map.get("title");

String msgContent=map.get("fu_title");

String url = map.get("src"); //图片地址

/*

* IOS设备扩展参数,

* 设置badge,设置声音

*/

Map extra = new HashMap();

extra.put("href", href);

extra.put("src", url);

//IOSExtra iosExtra = new IOSExtra(10, "WindowsLogonSound.wav");

//extra.put("ios", iosExtra);

//对所有用户发送通知, 更多方法请参考文档 message字段

//MessageResult msgResult = jpush.sendNotificationWithAppKey(sendNo, msgTitle, msgContent, 2, extra);

MessageResult msgResult = jpush.sendCustomMessageWithAppKey(sendNo, msgTitle, msgContent, "a", extra); //发送自定义消息

//MessageResult msgResult = jpush.sendCustomMessageWithAppKey(sendNo,msgTitle, msgContent);

//MessageResult msgResult = jpush.sendNotificationWithAlias(sendNo, "a", msgTitle, msgContent);

//覆盖指定msgId的消息,msgId可以从msgResult.getMsgid()获取。

//MessageResult msgResult = jpush.sendNotificationWithAppKey(sendNo, msgTitle, msgContent, 0, extra,msgResult.getMsgid());

if (null != msgResult) {

System.out.println("服务器返回数据: " + msgResult.toString());

if (msgResult.getErrcode() == ErrorCodeEnum.NOERROR.value()) {

System.out.println(String.format("发送成功, sendNo= %s,messageId= %s",msgResult.getSendno(),msgResult.getMsg_id()));

} else {

System.out.println("发送失败, 错误代码=" + msgResult.getErrcode() + ", 错误消息=" + msgResult.getErrmsg());

}

} else {

System.out.println("无法获取数据");

}

}

public static final int MAX = Integer.MAX_VALUE;

public static final int MIN = (int) MAX/2;

/**

* 保持 sendNo 的唯一性是有必要的

* It is very important to keep sendNo unique.

* @return sendNo

*/

public static int getRandomSendNo() {

return (int) (MIN + Math.random() * (MAX - MIN));

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。