标签:
<?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