学习使用Android极光消息推送

阅读: 评论:0

学习使用Android极光消息推送

学习使用Android极光消息推送

极光官网:www.jpush
官方指南:/

下载SDK

地址:
选择你需要的进行下载,并导入到的项目中。

配置

依照如下形式在清单文件中添加代码,并把包名和Appkey换成自己的包名。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android=""package="包名"android:versionCode="1"android:versionName="1.0" ><uses-sdk
        android:minSdkVersion="8"android:targetSdkVersion="14" /><permission
        android:name="包名.permission.JPUSH_MESSAGE"android:protectionLevel="signature" /><!-- Required  一些系统要求的权限,如访问网络等--><uses-permission android:name="包名.permission.JPUSH_MESSAGE" /><!-- 官方定义的权限,允许应用接收JPUSH内部代码发送的广播消息。 --><uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" /><!-- 允许应用可以接收点亮屏幕或解锁广播。 --><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WAKE_LOCK" /><!-- 允许应用在手机屏幕关闭后后台进程仍然运行 --><uses-permission android:name="android.permission.READ_PHONE_STATE" /><!-- 允许应用访问手机状态。 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 允许应用写入外部存储。 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><!-- 允许应用读取外部存储。 --><uses-permission android:name="android.permission.VIBRATE" /><!-- 允许应用震动。 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><!-- 允许应用挂载/卸载 外部文件系统。 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!-- 允许应用获取网络信息状态,如当前的网络连接是否有效。 --><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>  <!-- 允许应用显示系统窗口,位于显示的顶层。 --><uses-permission android:name="android.permission.WRITE_SETTINGS" /><!-- 允许应用读写系统设置项。 --><!-- Optional for location --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /><application
        android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:name="包名.MyApplication"android:theme="@style/AppTheme" ><activity
            android:name="你的Activity"android:launchMode="singleTask"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><!-- Required SDK核心功能--><activity
            android:name="cn.jpush.android.ui.PushActivity"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:configChanges="orientation|keyboardHidden" ><intent-filter><action android:name="cn.jpush.android.ui.PushActivity" /><category android:name="android.intent.category.DEFAULT" /><category android:name="包名" /></intent-filter></activity><!-- Required  SDK核心功能--><service
            android:name="cn.jpush.android.service.DownloadService"android:enabled="true"android:exported="false" ></service><!-- Required SDK 核心功能--><service
            android:name="cn.jpush.android.service.PushService"android:enabled="true"android:exported="false"><intent-filter><action android:name="cn.jpush.android.intent.REGISTER" /><action android:name="cn.jpush.android.intent.REPORT" /><action android:name="cn.jpush.android.intent.PushService" /><action android:name="cn.jpush.android.intent.PUSH_TIME" /></intent-filter></service><!-- Required SDK核心功能--><receiver
            android:name="cn.jpush.android.service.PushReceiver"android:enabled="true" ><intent-filter android:priority="1000"><action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />   <!--Required  显示通知栏 --><category android:name="包名" /></intent-filter><intent-filter><action android:name="android.intent.action.USER_PRESENT" /><action android:name=&#CONNECTIVITY_CHANGE" /></intent-filter><!-- Optional --><intent-filter><action android:name="android.intent.action.PACKAGE_ADDED" /><action android:name="android.intent.action.PACKAGE_REMOVED" /><data android:scheme="package" /></intent-filter></receiver><!-- Required SDK核心功能--><receiver android:name="cn.jpush.android.service.AlarmReceiver" /><!-- User defined.    用户自定义的广播接收器--><receiver
            android:name="你的自定义MyReceiver"android:enabled="true"><intent-filter><action android:name="cn.jpush.android.intent.REGISTRATION" /> <!--Required  用户注册SDK的intent--><action android:name="cn.jpush.android.intent.UNREGISTRATION" />  <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /> <!--Required  用户接收SDK消息的intent--><action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /> <!--Required  用户接收SDK通知栏信息的intent--><action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!--Required  用户打开自定义通知栏的intent--><action android:name="cn.jpush.android.intent.CONNECTION" /><!-- 接收网络变化 连接/断开 since 1.6.3 --><action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED"/><!-- 用户点击了通知 --><action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" /><!--富文本页面 Javascript 回调API  --><category android:name="包名" /></intent-filter></receiver><!-- Required  . Enable it you can get statistics data with channel --><meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/><meta-data android:name="JPUSH_APPKEY" android:value="XXX 你的AppKey XXX" /> <!--  </>值来自开发者平台取得的AppKey--></application></manifest>

初始化极光推送

自定义application

import cn.jpush.android.api.JPushInterface;
import android.app.Application;/** * @author yangshuai* @version 创建时间:2015-4-13 上午10:16:44 * 类说明 :自定义application*/
public class MyApplication extends Application {@Overridepublic void onCreate() {Create();JPushInterface.setDebugMode(true);//设置显示调试JPushInterface.init(this);//初始化API}
}

停止推送代码:

JPushInterface.stopPush(getApplicationContext());

恢复推送代码:

sumePush(getApplicationContext());

自定义Receiver接受推送

/*** @author yangshuai* @version 创建时间:2015-4-13 上午10:07:10 * 类说明 :自定义Receive接受推送*/
public class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context arg0, Intent arg1) {Bundle bundle = Extras();// 消息标题,对应 API 消息内容的 title 字段,Portal 推送消息界上不作展示if (ainsKey(JPushInterface.EXTRA_TITLE)) {String titleString = String(JPushInterface.EXTRA_TITLE);}// 附加字段,是个 JSON 字符串,对应 API 消息内容的 extras 字段.// 对应 Portal推送消息界面上的“可选设置”里的附加字段if (ainsKey(JPushInterface.EXTRA_EXTRA)) {String extrasString = String(JPushInterface.EXTRA_EXTRA);}// 内容类型,对应 API 消息内容的 content_type 字段if (ainsKey(JPushInterface.EXTRA_CONTENT_TYPE)) {String typeString = String(JPushInterface.EXTRA_CONTENT_TYPE);}// 唯一标识消息的 ID, 可用于上报统计等。if (ainsKey(JPushInterface.EXTRA_MSG_ID)) {String msgIdString = String(JPushInterface.EXTRA_MSG_ID);}/*** 对action行为的判断*/if (JPushInterface.ACTION_REGISTRATION_ID.Action())) {// SDK 向 JPush Server 注册所得到的注册 全局唯一的 ID ,可以通过此 ID 向对应的客户端发送消息和通知。String registrationIdString = String(JPushInterface.EXTRA_REGISTRATION_ID);} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.Action())) {System.out.println("收到了自定义消息。消息内容是:"+ String(JPushInterface.EXTRA_MESSAGE));// 自定义消息不会展示在通知栏,完全要开发者写代码去处理// 消息内容,对应 API 消息内容的 message 字段,对应 Portal 推送消息界面上的"自定义消息内容”字段if (ainsKey(JPushInterface.EXTRA_MESSAGE)) {String messageString = String(JPushInterface.EXTRA_MESSAGE);}processCustomMessage(arg0, bundle);//传送内容到主界面上} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.Action())) {System.out.println("收到了通知");// 在这里可以做些统计,或者做些其他工作// 通知的标题,对应 API 通知内容的 n_title 字段,对应 Portal 推送通知界面上的“通知标题”字段String notificationTileString = String(JPushInterface.EXTRA_NOTIFICATION_TITLE);// 通知内容,对应 API 通知内容的 n_content 字段,对应 Portal 推送通知界面上的“通知内容”字段String alertString = String(JPushInterface.EXTRA_ALERT);// 通知栏的Notification ID,可以用于清除Notificationint notificationId = Int(JPushInterface.EXTRA_NOTIFICATION_ID);} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.Action())) {System.out.println("用户点击打开了通知");// 在这里可以自己写代码去定义用户点击后的行为Toast.makeText(arg0, "你表点人家啦。。。。", Toast.LENGTH_SHORT).show();portNotificationOpened(String(JPushInterface.EXTRA_MSG_ID));// 用于上报用户的通知栏被打开} else if (JPushInterface.ACTION_CONNECTION_CHANGE.Action())) {// 网络断开,连接boolean connected = BooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);// Toast.makeText(arg0, "网络连接" + connected,// Toast.LENGTH_SHORT).show();} else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.Action())) {// 接受富推送// 富文本页面 Javascript 回调API,获取参数参数 ”params“if (ainsKey(JPushInterface.EXTRA_EXTRA)) {String params = StringExtra(JPushInterface.EXTRA_EXTRA);}// 富媒体通消息推送下载后的文件路径和文件名。if (ainsKey(JPushInterface.EXTRA_RICHPUSH_FILE_PATH)) {String filePathString = String(JPushInterface.EXTRA_RICHPUSH_FILE_PATH);}// 富媒体通知推送下载的HTML的文件路径,用于展现WebView。if (ainsKey(JPushInterface.EXTRA_RICHPUSH_HTML_PATH)) {String fileHtmlPath = String(JPushInterface.EXTRA_RICHPUSH_HTML_PATH);}// 富媒体通知推送下载的图片资源的文件名,多个文件名用 “,” 分开,路径为 fileHtmlPathif (ainsKey(JPushInterface.EXTRA_RICHPUSH_HTML_RES)) {String fileImageStr = String(JPushInterface.EXTRA_RICHPUSH_HTML_RES);String[] fileNames = fileImageStr.split(",");}} else {Log.d("其它的action行为", "Unhandled intent - " + Action());}}// send msg to MainActivityprivate void processCustomMessage(Context context, Bundle bundle) {if (MainActivity.isForeground) {String message = String(JPushInterface.EXTRA_MESSAGE);String extras = String(JPushInterface.EXTRA_EXTRA);Intent msgIntent = new Intent(MainActivity.MESSAGE_RECEIVED_ACTION);msgIntent.putExtra(MainActivity.KEY_MESSAGE, message);if (!MyUtil.isEmpty(extras)) {try {JSONObject extraJson = new JSONObject(extras);if (null != extraJson && extraJson.length() > 0) {msgIntent.putExtra(MainActivity.KEY_EXTRAS, extras);}} catch (JSONException e) {}}context.sendBroadcast(msgIntent);}}// 打印所有的 intent extra 数据private static String printBundle(Bundle bundle) {StringBuilder sb = new StringBuilder();for (String key : bundle.keySet()) {if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {sb.append("nkey:" + key + ", value:" + Int(key));} else if (key.equals(JPushInterface.EXTRA_CONNECTION_CHANGE)) {sb.append("nkey:" + key + ", value:" + Boolean(key));} else {sb.append("nkey:" + key + ", value:" + String(key));}}String();}
}

主要使用方法

公共类,所有的主要方法都在里面,调用即可:

/*** @author yangshuai* @version 创建时间:2015-4-13 下午4:19:06 类说明 :工具类*/
public class MyUtil {/*** 同时设置别名与标签* * @param context* @param alias*            为null时不设置此值,"" (空字符串)表示取消之前的设置,字母(区分大小写)、数字、下划线、汉字,长度限制为 40*            字节。(判断长度需采用UTF-8编码)* @param tags*            为null时不设置此值,空数组或列表表示取消之前的设置,字母(区分大小写)、数字、下划线、汉字,长度限制为 40*            字节,最多支持设置 100 个 tag,但总长度不得超过1K字节。(判断长度需采用UTF-8编码)* @param callback*            在 TagAliasCallback 的 gotResult 方法,返回对应的参数 alias,*            tags。并返回对应的状态码:0为成功* * @描述 每次调用设置有效的别名,覆盖之前的设置。*/public static void setAliasAndTags(Context context, String alias,Set<String> tags, TagAliasCallback callback) {JPushInterface.setAliasAndTags(context, alias, tags, callback);}/*** 设置别名* * @param context* @param alias*            "" (空字符串)表示取消之前的设置,字母(区分大小写)、数字、下划线、汉字* @param callback*            在TagAliasCallback 的 gotResult 方法,返回对应的参数 alias,*            tags。并返回对应的状态码:0为成功* @描述:每次调用设置有效的别名,覆盖之前的设置。alias 命名长度限制为 40 字节。(判断长度需采用UTF-8编码)* */public static void setAlias(Context context, String alias,TagAliasCallback callback) {JPushInterface.setAlias(context, alias, callback);}/*** 设置标签* * @param context* @param tags*            空数组或列表表示取消之前的设置,字母(区分大小写)、数字、下划线、汉字* @param callback*            在 TagAliasCallback 的 gotResult 方法,返回对应的参数 alias,*            tags。并返回对应的状态码:0为成功* @描述: 每次调用至少设置一个 tag,覆盖之前的设置,不是新增.每个 tag 命名长度限制为 40 字节,最多支持设置 100 个*      tag,但总长度不得超过1K字节。(判断长度需采用UTF-8编码).单个设备最多支持设置 100 个 tag。App 全局 tag*      数量无限制。*/public static void setTags(Context context, Set<String> tags,TagAliasCallback callback) {JPushInterface.setTags(context, tags, callback);}/*** 滤掉无效的 tags* @param tags* @return 有效的 tag 集合。*/public static Set<String> filterValidTags(Set<String> tags){return JPushInterface.filterValidTags(tags);}/*** 设置推送时间* * @param context*            ApplicationContext* @param startHour*            int startHour 允许推送的开始时间 (24小时制:startHour的范围为0到23)* @param endHour*            int endHour 允许推送的结束时间 (24小时制:endHour的范围为0到23)* @param integers*            0表示星期天,1表示星期一,以此类推。*            (7天制,Set集合里面的int范围为0到6),set的值为null,则任何时间都可以收到消息和通知*            ,set的size为0,则表示任何时间都收不到消息和通知.*/public static void setPushTime(Context context, int startHour, int  integers) {// 设置推送时间Set<Integer> daysIntegers = new HashSet<Integer>();if (integers == null) {daysIntegers = null;} else {for (int i = 0; i < integers.length; i++) {daysIntegers.add(integers[i]);}}JPushInterface.setPushTime(context, daysIntegers, startHour, endHour);}/*** 设置通知静默时间段* * @param context*            ApplicationContext* @param startHour*            int startHour 静音时段的开始时间 - 小时 (24小时制,范围:0~23 )* @param startMinute*            int startMinute 静音时段的开始时间 - 分钟(范围:0~59 )* @param endHour*            int endHour 静音时段的结束时间 - 小时 (24小时制,范围:0~23 )* @param endMinute*            int endMinute 静音时段的结束时间 - 分钟(范围:0~59 )*/public static void setSilenceTime(Context context, int startHour,int startMinute, int endHour, int endMinute) {JPushInterface.setSilenceTime(context, startHour, startMinute, endHour,endMinute);}public static class CustomNotificationBuilder {private Context context;private int number;private int layoutId;private int iconTipId = -1;private int iconShowId = -1;private int notificationFlags = -1;private int notificationDefaults = 0;/*** * @param context*            Context*/public CustomNotificationBuilder(Context context) {super();t = context;}/*** 设置编号* * @param number*            编号* @return*/public CustomNotificationBuilder setNumber(int number) {this.number = number;return this;}/*** 设置通知栏显示布局* * @param layoutId*            布局id* @return*/public CustomNotificationBuilder setLayout(int layoutId) {this.layoutId = layoutId;return this;}/*** 设置最顶层状态栏小图标* * @param iconTipId*            图片id* @return*/public CustomNotificationBuilder setIconTip(int iconTipId) {this.iconTipId = iconTipId;return this;}/*** 设置下拉状态栏时显示的通知图标* * @param iconShowId*            图片id* @return*/public CustomNotificationBuilder setIconShow(int iconShowId) {this.iconShowId = iconShowId;return this;}/*** 设置行为* * @param flags*            例如 Notification.FLAG_AUTO_CANCEL; 自动消失* @return*/public CustomNotificationBuilder setFlags(int flags) {ificationFlags = flags;return this;}/*** 设置铃声,震动,提示灯* * @param defaults*            铃声 Notification.DEFAULT_SOUND; 震动*            Notification.DEFAULT_VIBRATE ; 提示灯*            Notification.DEFAULT_LIGHTS* @return*/public CustomNotificationBuilder  defaults) {for (int i = 0; i < defaults.length; i++) {notificationDefaults |= defaults[i];}return this;}public void init() {// 指定定制的 Notification LayoutCustomPushNotificationBuilder builder = new CustomPushNotificationBuilder(context, layoutId, R.id.custom_push_notification_icon,R.id.custom_push_notification_title,R.id.custom_push_notification_text);if (iconTipId != -1) {// 指定最顶层状态栏小图标builder.statusBarDrawable = iconTipId;}if (iconShowId != -1) {// 指定下拉状态栏时显示的通知图标builder.layoutIconDrawable = iconShowId;}// 设置行为if (notificationFlags != -1) {ificationFlags = notificationFlags;}// 设置铃声,震动,提示灯。if (notificationDefaults != 0) {ificationDefaults = notificationDefaults;}JPushInterface.setPushNotificationBuilder(number, builder);}}/*** 自定义通知栏* * @param context* @param number*            编号* @param layoutId*            布局Id* @param iconTipId*            指定最顶层状态栏小图标* @param iconShowId*            指定下拉状态栏时显示的通知图标* @param flags*            设置行为* @param defaults*            设置铃声,震动,提示灯* * @params flags 例如 Notification.FLAG_AUTO_CANCEL; 自动消失* @params defaults 铃声 Notification.DEFAULT_SOUND; 震动*         Notification.DEFAULT_VIBRATE ; 提示灯 Notification.DEFAULT_LIGHTS*/public static void initCustomPushNotificationBuilder(Context context,int number, int layoutId, int iconTipId, int iconShowId, int  defaults) {CustomNotificationBuilder builder = new CustomNotificationBuilder(context);builder.setLayout(layoutId);builder.setIconTip(iconTipId);builder.setIconShow(iconShowId);builder.setNumber(number);builder.setFlags(flags);builder.setDefaults(defaults);builder.init();}/*** 自定义通知栏* * @param context* @param number*            编号* @param layoutId*            布局Id* @param iconTipId*            指定最顶层状态栏小图标* @param iconShowId*            指定下拉状态栏时显示的通知图标*/public static void customPushNotification(Context context, int number,int layoutId, int iconTipId, int iconShowId) {// 指定定制的 Notification LayoutCustomPushNotificationBuilder builder = new CustomPushNotificationBuilder(context, layoutId, R.id.custom_push_notification_icon,R.id.custom_push_notification_title,R.id.custom_push_notification_text);// 指定最顶层状态栏小图标builder.statusBarDrawable = iconTipId;// 指定下拉状态栏时显示的通知图标builder.layoutIconDrawable = iconShowId;JPushInterface.setPushNotificationBuilder(number, builder);}/*** 自定义通知栏* * @param context* @param number*            编号* @param layoutId*            布局Id*/public static void customPushNotification(Context context, int number,int layoutId) {// 指定定制的 Notification LayoutCustomPushNotificationBuilder builder = new CustomPushNotificationBuilder(context, layoutId, R.id.custom_push_notification_icon,R.id.custom_push_notification_title,R.id.custom_push_notification_text);// 指定最顶层状态栏小图标builder.statusBarDrawable = R.drawable.ic_launcher;// 指定下拉状态栏时显示的通知图标builder.layoutIconDrawable = R.drawable.ic_launcher;JPushInterface.setPushNotificationBuilder(number, builder);}/*** 设置保留最近通知条数* * @param context* @param maxNum*            最多显示的条数*/public static void setLatestNotificationNumber(Context context, int maxNum) {JPushInterface.setLatestNotificationNumber(context, maxNum);}/*** 本地通知工具帮助类* * @author yangshuai* */public static class localNotificationBuilder {private Context context;private JPushLocalNotification ln = new JPushLocalNotification();/*** getApplicationContext* * @param context*/public localNotificationBuilder(Context context) {t = context;}/*** 设置编号* * @param number* @return*/public localNotificationBuilder setBuilderId(long number) {ln.setBuilderId(number);return this;}/*** 设置标题* * @param title* @return*/public localNotificationBuilder setTitle(String title) {ln.setTitle(title);return this;}/*** 设置内容* * @param content* @return*/public localNotificationBuilder setContent(String content) {ln.setContent(content);return this;}/*** 设置额外的数据信息extras为json字符串* * @param extras*            Map<String , Object>* @return*/public localNotificationBuilder setExtras(Map<String, Object> extras) {JSONObject json = new JSONObject(extras);ln.String());return this;}/*** 设置本地通知触发时间* * @param broadCastTime*            long* @return*/public localNotificationBuilder setBroadcastTime(long broadCastTime) {ln.setBroadcastTime(broadCastTime);return this;}/*** 设置本地通知触发时间* * @param date*            Date* @return*/public localNotificationBuilder setBroadcastTime(Date date) {ln.setBroadcastTime(date);return this;}public localNotificationBuilder setBroadcastTime(int year, int month,int day, int hour, int minute, int second) {ln.setBroadcastTime(year, month, day, hour, minute, second);return this;}/*** 设置本地通知的ID* * @param notificationId* @return*/public localNotificationBuilder setNotificationId(long notificationId) {ln.setNotificationId(notificationId);return this;}public void create() {JPushInterface.addLocalNotification(context, ln);}}/*** 显示本地通知* * @param context* @param number* @param title* @param content* @param notificationId* @param time*/public static void showLocalNotification(Context context, long number,String title, String content, long notificationId, long time) {MyUtil.localNotificationBuilder builder = new localNotificationBuilder(context);builder.setBuilderId(number);builder.setContent(content);builder.setTitle(title);builder.setNotificationId(notificationId);builder.setBroadcastTime(time);ate();}/*** 清除所有的通知* * @param context*            ApplicationContext*/public static void clearAllNotifications(Context context) {JPushInterface.clearAllNotifications(context);}/*** 清除指定Id的通知* * @param context*            ApplicationContext* @param notificationId*            通知ID*/public static void clearNotificationById(Context context, int notificationId) {JPushInterface.clearNotificationById(context, notificationId);}public static final String KEY_APP_KEY = "JPUSH_APPKEY";public static boolean isEmpty(String s) {if (null == s)return true;if (s.length() == 0)return true;if (s.trim().length() == 0)return true;return false;}// 校验Tag Alias 只能是数字,英文字母和中文public static boolean isValidTagAndAlias(String s) {Pattern p = Patternpile("^[u4E00-u9FA50-9a-zA-Z_-]{0,}$");Matcher m = p.matcher(s);return m.matches();}// 取得AppKeypublic static String getAppKey(Context context) {Bundle metaData = null;String appKey = null;try {ApplicationInfo ai = PackageManager().PackageName(),PackageManager.GET_META_DATA);if (null != ai)metaData = ai.metaData;if (null != metaData) {appKey = String(KEY_APP_KEY);if ((null == appKey) || appKey.length() != 24) {appKey = null;}}} catch (NameNotFoundException e) {}return appKey;}// 取得版本号public static String GetVersion(Context context) {try {PackageInfo manager = PackageManager().PackageName(), 0);return manager.versionName;} catch (NameNotFoundException e) {return "Unknown";}}public static void showToast(final String toast, final Context context) {new Thread(new Runnable() {@Overridepublic void run() {Looper.prepare();Toast.makeText(context, toast, Toast.LENGTH_SHORT).show();Looper.loop();}}).start();}public static boolean isConnected(Context context) {ConnectivityManager conn = (ConnectivityManager) SystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo info = ActiveNetworkInfo();return (info != null && info.isConnected());}
}

TagAliasCallback错误参数描述:

富文本页面 Javascript 回调API

在你的html中调用如下功能函数:
1

JPushWeb.close();//关闭当前页

2

JPushWeb.startMainActivity(String params)//打开主Activity

在HTML中调用此函数后,会打开程序的主Activity, 并在对应的 Intent 传入参数 ”params“ ,Key 为 JPushInterface.EXTRA_EXTRA。

对应 Activity 获取 params 示例代码:

Intent intent = getIntent();
if (null != intent ) {String params = StringExtra(JPushInterface.EXTRA_EXTRA);
}

3

iggerNativeAction(String params)//触发App里执行动作

在HTML中调用此函数后,会以广播的形式传递 ”params“ 到应用程序并触发客户端动作,对应的receiver:

<receiver  android:name="MyReceiver">................<intent-filter><action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" /> <category android:name="包名" /></intent-filter>
</receiver>

获取:

if (JPushInterface.ACTION_RICHPUSH_CALLBACK.Action())) {Log.d(TAG, "用户收到到RICH PUSH CALLBACK: " + String(JPushInterface.EXTRA_EXTRA));//在这里根据 JPushInterface.EXTRA_EXTRA 的内容触发客户端动作,比如打开新的Activity 、打开一个网页等.     }

html代码示例引用官方的:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ".dtd">
<html><head><title>JPush Webview Test</title><script>function clickButton() {JPushWeb.close();}function openUrl() {var json = "{'action':'open', 'url':'www.jpush'}";iggerNativeAction(json);JPushWeb.close(); //客服端在广播中收到json 后,可以打开对应的URL。}</script></head><body><button onclick="javascript:clickButton(this);return false;">Close</button><button onclick="javascript:JPushWeb.startMainActivity('test - startMainActivity');return false;">StartMainActivity</button><button onclick="iggerNativeAction('test - triggerNativeAction');Javascript:JPushWeb.close();">triggerNativeAction and Close current webwiew</button><button onclick="javascript:JPushWeb.startActivityByName(&#ample.jpushdemo.TestActivity','test - startActivityByName');">startActivityByName</button><button onclick="javascript:openUrl();">open a url</button></body>
</html>

Activity应用中的使用

首先是自定的通知栏布局R.layout.customer_notitfication_layout_one:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="horizontal" ><ImageView
        android:id="@+id/custom_push_notification_icon"android:layout_width="wrap_content"android:layout_height="wrap_content" /><LinearLayout
        android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical" ><TextView
            android:id="@+id/custom_push_notification_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="#A4C638"android:textSize="20sp" /><TextView
            android:id="@+id/custom_push_notification_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="#FFB6FF"android:textSize="20sp" /></LinearLayout></LinearLayout>

主布局是两个按钮和一个文本框显示接受到的自定义消息,这里就不贴代码了。

Activity中的代码主要用于接受自定义消息、发送本地通知、清楚本地通知、自定义通知栏:

public class MainActivity extends Activity implementsandroid.view.View.OnClickListener {private EditText messageTv;public static boolean isForeground;@Overrideprotected void onCreate(Bundle savedInstanceState) {Create(savedInstanceState);setContentView(R.layout.activity_main);MyUtil.initCustomPushNotificationBuilder(this, 1,R.layout.customer_notitfication_layout_one,R.drawable.tip_icon, R.drawable.show_icon,Notification.FLAG_AUTO_CANCEL, Notification.DEFAULT_SOUND,Notification.DEFAULT_LIGHTS);// 自定义编号1的通知栏((Button) findViewById(R.id.local_alert_btn)).setOnClickListener(this);((Button) findViewById(R.id.local_alert_clear_btn)).setOnClickListener(this);messageTv = ((EditText) findViewById(ssageString));registerMessageReceiver();// 初始化从Receiver接受自定义消息}/*** 重写onResume()和onPause()用于统计分析 API*/// /@Overrideprotected void onResume() {Resume();isForeground = Resume(this);}@Overrideprotected void onPause() {Pause();isForeground = Pause(this);}// //@Overrideprotected void onDestroy() {Destroy();unregisterReceiver(mMessageReceiver);}@Overridepublic void onClick(View arg0) {switch (Id()) {case R.id.local_alert_btn://本地通知按钮被点击,编号为111111MyUtil.showLocalNotification(getApplicationContext(), 1, "本地title","本地content哈哈", 111111,java.lang.System.currentTimeMillis() + 10);break;case R.id.local_alert_clear_btn://按编号清楚本地通知MyUtil.clearNotificationById(getApplicationContext(), 111111);break;default:break;}}// 从Receiver接受自定义消息private MessageReceiver mMessageReceiver;public static final String MESSAGE_RECEIVED_ACTION = "pushdemo.permission.JPUSH_MESSAGE";public static final String KEY_TITLE = "title";public static final String KEY_MESSAGE = "message";public static final String KEY_EXTRAS = "extras";public void registerMessageReceiver() {mMessageReceiver = new MessageReceiver();IntentFilter filter = new IntentFilter();filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);filter.addAction(MESSAGE_RECEIVED_ACTION);registerReceiver(mMessageReceiver, filter);}public class MessageReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(MainActivity.this, "xxxxxx", Toast.LENGTH_SHORT).show();if (MESSAGE_RECEIVED_ACTION.Action())) {String messge = StringExtra(KEY_MESSAGE);String extras = StringExtra(KEY_EXTRAS);StringBuilder showMsg = new StringBuilder();showMsg.append(KEY_MESSAGE + " : " + messge + "n");if (!MyUtil.isEmpty(extras)) {showMsg.append(KEY_EXTRAS + " : " + extras + "n");}String());}}}private void setCostomMsg(String msg) {if (null != messageTv) {messageTv.setText(msg);Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();messageTv.setVisibility(View.VISIBLE);}}
}

demo下载(内含工具类)

Android极光推送demo - 下载频道 - CSDN.NET

本文发布于:2024-02-01 22:23:46,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170679742839817.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:极光   消息   Android
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23