标签:




<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="您应用的包名" android:versionCode="180" android:versionName="1.8.0" > <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="17"/> <!--Required自定义用来收发消息的相关权限--> <permission android:name="您应用的包名.permission.JPUSH_MESSAGE" android:protectionLevel="signature"/> <!--Required 一些系统要求的权限,如访问网络等--> <uses-permission android:name="您应用的包名.permission.JPUSH_MESSAGE"/> <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.WRITE_SETTINGS"/> <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"/> <!--Optionalfor 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:icon="@drawable/ic_launcher" android:label="@string/app_name"> <!--Required SDK核心功能--> <activity android:name="cn.jpush.android.ui.PushActivity" android:configChanges="orientation|keyboardHidden" android:exported="false"> <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 核心功能--> <service android:name="cn.jpush.android.service.DaemonService" android:enabled="true" android:exported="true"> <intent-filter > <action android:name="cn.jpush.android.intent.DaemonService"/> <category android:name="您应用的包名"/> </intent-filter> </service> <!--Required SDK核心功能--> <receiver android:name="cn.jpush.android.service.PushReceiver" android:enabled="true" android:exported="false"> <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="android.net.conn.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="您自己定义的Receiver" 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.ACTION_RICHPUSH_CALLBACK"/><!--Optional用户接受RichPushJavascript回调函数的intent--> <action android:name="cn.jpush.android.intent.CONNECTION"/><!--接收网络变化连接/断开 since 1.6.3--> <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="您的Appkey"/><!-- </>值来自开发者平台取得的AppKey--> </application></manifest>
package com.centrvideo.parkapp.jpush;import java.io.Serializable;import java.util.HashSet;import java.util.Set;import android.content.Context;import android.os.Handler;import android.text.TextUtils;import android.util.Log;import android.widget.Toast;import cn.jpush.android.api.JPushInterface;import cn.jpush.android.api.TagAliasCallback;import com.centrvideo.parkapp.util.SharedPreferenceUtil;/** * 极光推送封装,极光管理类 * @ClassName: JPushManager * @Description: * @author xiaoxiao * @date modify by 2015-9-2 上午11:12:10 * */public class JPushManager { private String TAG = "JPushManager"; private final String KEY = "JpushConfig"; private static JPushManager jPushManager; private static Context context; public static JPushManager newInstence(Context context) { JPushManager.context = context; if (jPushManager == null) { jPushManager = new JPushManager(); } return jPushManager; } /** * 初始化极光,一般可以放到程序的启动Activity或是Application的onCreate方法中调用 */ public void initJPush() { JPushInterface.setDebugMode(true); // 设置开启日志,发布时请关闭日志 JPushInterface.init(context); // 初始化 JPush } /** * 退出极光,一般是程序退出登录时候,具体还是需要看项目的实际需求 */ public void stopJPush() {// JPushInterface.stopPush(context);// setAliasAndTags("","");//通过清空别名来停止极光 } /** * 设置AliasAndTag,设置多组tag,如果不需要设置tag的化,直接将此参数设为null; * 一般在程序登录成功,注册成功等地方调用。别名一般是用户的唯一标识,如userId等 * @param alias * @param tags */ public void setAliasAndTags(final String alias, Set<String> tags) { if (TextUtils.isEmpty(alias)) { Toast.makeText(context, "别名为空", Toast.LENGTH_SHORT).show(); return; } // 调用 Handler 来异步设置别名 // TODO Auto-generated method stub AliasAndTagsInfo aliasAndTagsInfo = new AliasAndTagsInfo(); aliasAndTagsInfo.setAlias(alias); aliasAndTagsInfo.setTag(tags); mHandler.sendMessage(mHandler.obtainMessage(MSG_SET_ALIAS, aliasAndTagsInfo)); } /** * 设置AliasAndTag,设置一组tag,如果不需要设置tag的化,直接将此参数设为null; * @param alias * @param tags */ public void setAliasAndTags(final String alias, String tag) { if (TextUtils.isEmpty(alias)) { Toast.makeText(context, "别名为空", Toast.LENGTH_SHORT).show(); return; } // 调用 Handler 来异步设置别名 // TODO Auto-generated method stub AliasAndTagsInfo aliasAndTagsInfo = new AliasAndTagsInfo(); aliasAndTagsInfo.setAlias(alias); Set<String> tags = new HashSet<String>(); tags.add(tag); aliasAndTagsInfo.setTag(tags); mHandler.sendMessage(mHandler.obtainMessage(MSG_SET_ALIAS, aliasAndTagsInfo)); } private final TagAliasCallback mAliasCallback = new TagAliasCallback() { @Override public void gotResult(int code, String alias, Set<String> tags) { String logs; switch (code) { case 0: logs = "Set tag and alias success"; Log.d(TAG, logs); // 建议这里往 SharePreference 里写一个成功设置的状态。成功设置一次后,以后不必再次设置了。 saveAlias(alias); break; case 6002: logs = "Failed to set alias and tags due to timeout. Try again after 60s."; Log.d(TAG, logs); // 延迟 60 秒来调用 Handler 设置别名 mHandler.sendMessageDelayed( mHandler.obtainMessage(MSG_SET_ALIAS, alias), 1000 * 60); break; default: logs = "Failed with errorCode = " + code; Log.d(TAG, logs); } } }; /** * 保存别名到属性文件。 * * @param alias */ private void saveAlias(String alias) { SharedPreferenceUtil.saveString(context, KEY, alias); } /** * 从属性文件取得别名 * * @param userName * @return */ private String getAlias(String userName) { return SharedPreferenceUtil.getString(context, KEY, null); } private static final int MSG_SET_ALIAS = 1001; private final Handler mHandler = new Handler() { @Override public void handleMessage(android.os.Message msg) { super.handleMessage(msg); AliasAndTagsInfo aliasAndTagsInfo = (AliasAndTagsInfo) msg.obj; switch (msg.what) { case MSG_SET_ALIAS: Log.d(TAG, "Set alias in handler."); // 调用 JPush 接口来设置别名。 JPushInterface.setAliasAndTags(context, aliasAndTagsInfo.getAlias(), aliasAndTagsInfo.getTag(), mAliasCallback); break; default: Log.d(TAG, "Unhandled msg - " + msg.what); } } }; public class AliasAndTagsInfo implements Serializable { private static final long serialVersionUID = 1L; private String alias; private Set<String> tag; public String getAlias() { return alias; } public void setAlias(String alias) { this.alias = alias; } public Set<String> getTag() { return tag; } public void setTag(Set<String> tag) { this.tag = tag; } }}
标签:
原文地址:http://www.cnblogs.com/xiaoxiao-study/p/897237cd25240e622ceed5b6e36e9060.html