在AndroidManifest.xml加入以下代码:
<!-- Required SDK核心功能-->
<activity
android:name="cn.jpush.android.ui.PushActivity"
android:configChanges="orientation|keyboardHidden"
android:theme="@android:style/Theme.NoTitleBar"
android:exported="false">
<intent-filter>
<action android:name="cn.jpush.android.ui.PushActivity" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.shipping" />
</intent-filter>
</activity>
<!-- Required SDK核心功能 -->
<service
android:name="cn.jpush.android.service.DownloadService"
android:enabled="true"
android:exported="false" >
</service>
<!-- ANT FALG END1 -->
<!-- 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>
<!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
<!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
<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="com.shipping" />
</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="com.shipping" />
</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" android:exported="false"/>
<!-- User defined. For test only 用户自定义的广播接收器 -->
<receiver
android:name="com.shipping.service.TalkReceiver"
android:exported="false"
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 用户接受Rich Push Javascript 回调函数的intent-->
<action android:name="cn.jpush.android.intent.CONNECTION" /><!-- 接收网络变化 连接/断开 since 1.6.3 -->
<category android:name="com.shipping" />
</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="5a603b9fd7831099a1bfe468" />
</application>
<uses-permission android:name="com.shipping.permission.JPUSH_MESSAGE" />
<uses-permission android:name="android.permission.SET_WALLPAPER" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
接收推送消息的Receiver
package com.shipping.service;
import org.json.JSONException;
import org.json.JSONObject;
import com.shipping.activity.ship.MyInquiryPalletDetailActivity;
import com.shipping.activity.ship.MyInquiryPalletDlActivity;
import com.shipping.app.IntentAction;
import com.shippingframework.app.Config;
import com.shippingframework.sharedpreferences.AppSharedPreferences;
import com.shippingframework.utils.JsonUtil;
import com.shippingframework.utils.L;
import cn.jpush.android.api.JPushInterface;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
public class TalkReceiver extends BroadcastReceiver {
private static final String TAG = "TalkReceiver";
private NotificationManager nm;
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if (null == nm) {
nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
}
Bundle bundle = intent.getExtras();
// L.i(TAG, "onReceive - " + intent.getAction() + ", extras: " +
// AndroidUtil.printBundle(bundle));
L.i(TAG, "onReceive - " + intent.getAction());
if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
L.i(TAG, "JPush用户注册成功");
} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
L.i(TAG, "接受到推送下来的自定义消息");
// Push Talk messages are push down by custom message format
processCustomMessage(context, bundle);
} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent
.getAction())) {
L.i(TAG, "接受到推送下来的通知");
} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
L.i(TAG, "用户点击打开了通知");
// Intent i = new Intent(
// context,
// MyInquiryPalletDlActivity.class);
// i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// context.startActivity(i);
} else {
L.i(TAG, "Unhandled intent - " + intent.getAction());
}
}
private void processCustomMessage(Context context, Bundle bundle) {
String title = bundle.getString(JPushInterface.EXTRA_TITLE);
String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);
Log.d(TAG, "[processCustomMessage]msg_content: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
Log.d(TAG, "[processCustomMessage]content_type: " + bundle.getString(JPushInterface.EXTRA_CONTENT_TYPE));
Log.d(TAG, "[processCustomMessage]extras: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
Log.d(TAG, "[processCustomMessage]title: " + bundle.getString(JPushInterface.EXTRA_TITLE));
if (title.equals("")||title.length()<1) {
L.i(TAG, "Unexpected: empty title (friend). Give up");
return;
}
boolean needIncreaseUnread = true;
// if (title.equalsIgnoreCase(Config.myName)) {
// Logger.d(TAG, "Message from myself. Give up");
// needIncreaseUnread = false;
// if (!Config.IS_TEST_MODE) {
// return;
// }
// }
String friendName="";
int friendId=0;
int notificationId=0;
// String channel = null;
String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
try {
JSONObject extrasJson = new JSONObject(extras);
friendName=JsonUtil.getString(extrasJson, "SendNickName");
friendId=JsonUtil.getInt(extrasJson, "toUserId");
notificationId=JsonUtil.getInt(extrasJson, "ChatRecordId");
} catch (Exception e) {
L.i(TAG, "Unexpected: extras is not a valid json"+e);
}
// Send message to UI (Webview) only when UI is up
if (!Config.isBackground) {
Intent msgIntent = new Intent(IntentAction.MESSAGE_RECEIVED_ACTION);
msgIntent.putExtra(IntentAction.CHAT_KEY_MESSAGE, message);
msgIntent.putExtra(IntentAction.CHAT_KEY_TITLE, title);
// if (null != channel) {
// msgIntent.putExtra(Constants.KEY_CHANNEL, channel);
// }
JSONObject all = new JSONObject();
try {
// all.put(IntentAction.CHAT_KEY_TITLE, title);
all.put(IntentAction.CHAT_KEY_MESSAGE, message);
//all.put(IntentAction.CHAT_KEY_EXTRAS, new JSONObject(extras));
all.put(IntentAction.CHAT_KEY_EXTRAS, new JSONObject(extras));
} catch (JSONException e) {
}
L.i(TAG, "---------all="+all.toString());
msgIntent.putExtra("all", all.toString());
context.sendBroadcast(msgIntent);
}
AppSharedPreferences appSP=new AppSharedPreferences(context,AppSharedPreferences.CHATTING_SHAREPRE_FILE);
//
String currentChatting = appSP.getChattingCurrentId();
if ((friendId+"").equalsIgnoreCase(currentChatting)) {
L.d(TAG, "Is now chatting with - " + friendId + ". Dont show notificaiton.");
return;
}
NotificationHelper.showMessageNotification(context, nm, friendId,friendName, notificationId,message);
}
// When received message, increase unread number for Recent Chat
// private void unreadMessage(final String friend, final String channel) {
// new Thread() {
// public void run() {
// String chattingFriend = null;
// //if (StringUtils.isEmpty(channel)) {
// chattingFriend = friend;
// //}
//
// Map<String, String> params = new HashMap<String, String>();
// params.put("udid", Config.udid);
// params.put("friend", chattingFriend);
// params.put("channel_name", channel);
//
// try {
// HttpHelper.post(Constants.PATH_UNREAD, params);
// } catch (Exception e) {
// Logger.e(TAG, "Call pushtalk api to report unread error", e);
// }
// }
// }.start();
// }
}
用户登录app成功后,把UserIntId发送给极光推送的后台,后边就可以给这个用户推送消息
package com.shipping.activity;
import java.util.Set;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import cn.jpush.android.api.JPushInterface;
import cn.jpush.android.api.TagAliasCallback;
import com.shipping.R;
import com.shippingframework.entity.UserOnlineEntity;
import com.shippingframework.http.ResponseInfo;
import com.shippingframework.services.UserService;
import com.shippingframework.sharedpreferences.AppSharedPreferences;
import com.shippingframework.utils.L;
import com.shippingframework.utils.T;
import com.shippingframework.utils.TextViewUtil;
import com.shippingframework.utils.ValidateUtil;
public class LoginActivity extends ShipBaseActivity {
// button layout
private TextView login_forget_password;
private TextView goto_register;
private EditText login_account;
private EditText login_password;
private Button btn_login;
/**
* 用户级别的配置文件
* */
private AppSharedPreferences userSP;
private AppSharedPreferences appSP;
private static final int LOGIN_COMPLETE = 1;
private String uAccount = "";
private String uPassword = "";
private String TAG="LoginActivity";
private static final int MSG_SET_ALIAS = 1001;
private static final int MSG_SET_TAGS = 1002;
private int UserIntId=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
context = this;
title = "登录";
// 设置视图
setContentView(R.layout.activity_login);
// 获得实例对象
userSP = new AppSharedPreferences(context,
AppSharedPreferences.USER_SHAREPRE_FILE);
appSP = new AppSharedPreferences(context,
AppSharedPreferences.APP_SHAREPRE_FILE);
InitView();
InitData();
}
@Override
protected void InitView() {
super.InitView();
login_account = (EditText) findViewById(R.id.login_account);
btn_login = (Button) findViewById(R.id.btn_login);
login_password = (EditText) findViewById(R.id.login_password);
login_forget_password = (TextView) findViewById(R.id.Login_forget_password);
goto_register = (TextView) findViewById(R.id.goto_register);
TextViewUtil.setFlagsUnderline(login_forget_password);
}
@Override
protected void InitData() {
// TODO Auto-generated method stub
super.InitData();
// 登录
btn_login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
uAccount = login_account.getText().toString().trim();
uPassword = login_password.getText().toString().trim();
Login(uAccount, uPassword);
}
});
// 忘记密码
login_forget_password.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO 自动生成的方法存根
startActivity(new
Intent(context,ForgetPasswordActivity.class));
goFinish();
}
});
// 用户注册
goto_register.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO 自动生成的方法存根
startActivity(new Intent(context, RegisterActivity.class));
goFinish();
}
});
login_account.setText(appSP.getAppDefaultAccount());
login_password.setText(appSP.getAppDefaultPwd());
Intent intent = getIntent(); // 用于激活它的意图对象
if (intent != null) {
String phone = intent.getStringExtra("phone");
String password = intent.getStringExtra("password");
if (phone != null && !phone.equals("")) {
login_account.setText(phone);
if (password != null && !password.equals("")) {
login_password.setText(password);
}
}
}
// 实现自动登录
uAccount = login_account.getText().toString().trim();
uPassword = login_password.getText().toString().trim();
if (uAccount != null && !uAccount.equals("") && uPassword != null
&& !uPassword.equals("")) {
// if (StringUtil.isMobileNO(mAccount)) {
Login(uAccount, uPassword);
// }
}
}
protected void Login(final String uAccount, final String uPassword) {
if (uAccount != null && !uAccount.equals("") && uPassword != null
&& !uPassword.equals("")) {
if(ValidateUtil.IsMobile(uAccount)){
UserService userService = new UserService(context);
loading.show();
userService.Login(uAccount, uPassword, mHandler);
}else{
T.show(context, "帐号格式不正确");
}
} else {
T.show(context, "账户和密码不能为空");
}
}
Handler mHandler = new Handler() {
@SuppressLint("HandlerLeak")
public void handleMessage(android.os.Message msg) {
responseInfo = (ResponseInfo<?>) msg.obj;
loading.cancel();
switch (msg.what) {
case LOGIN_COMPLETE: {
if (responseInfo != null) {
if (responseInfo.success) {
UserOnlineEntity userOnline = (UserOnlineEntity) responseInfo.t;
if (userOnline != null&& !userOnline.getUserId().equals("")&& userOnline.getUserId().length() > 0) {
resetAliasAndTags();
T.show(context, "登录成功");
} else {
T.show(context, "登录失败");
}
goFinish();
} else {
T.show(context, responseInfo.message);
}
} else {
T.show(context, "服务器请求无响应");
}
}
break;
default:
break;
}
};
};
public void goFinish() {
this.finish();
}
private void resetAliasAndTags() {
L.i(TAG, "----------------------------------resetAliasAndTags begin");
// reset to jpush
// JPushInterface.setAliasAndTags(ChattingActivity.this, UserIntId+"",
// null, new TagAliasCallback() {
//
// @Override
// public void gotResult(int code, String alias, Set<String> tags) {
// L.i(TAG, "[TagAliasCallback], code: " + code);
// L.i(TAG, "[TagAliasCallback], alias: " + alias);
// L.i(TAG, "[TagAliasCallback], tags: " + tags);
// }
// });
UserIntId = userSP.getUserIntId();
L.i(TAG,
"----------------------------------resetAliasAndTags UserIntId="
+ UserIntId);
if(UserIntId>0){
// 调用JPush API设置Alias
jpushHandler.sendMessage(jpushHandler.obtainMessage(MSG_SET_ALIAS,
UserIntId + ""));
}
L.i(TAG, "----------------------------------resetAliasAndTags end");
}
private final TagAliasCallback mAliasCallback = new TagAliasCallback() {
@Override
public void gotResult(int code, String alias, Set<String> tags) {
L.i(TAG, "[TagAliasCallback], code: " + code);
L.i(TAG, "[TagAliasCallback], alias: " + alias);
L.i(TAG, "[TagAliasCallback], tags: " + tags);
String logs;
switch (code) {
case 0:
logs = "Set tag and alias success";
L.i(TAG, logs);
break;
case 6002:
logs = "Failed to set alias and tags due to timeout. Try again after 60s.";
L.i(TAG, logs);
jpushHandler.sendMessageDelayed(
jpushHandler.obtainMessage(MSG_SET_ALIAS, alias),
1000 * 60);
break;
default:
logs = "Failed with errorCode = " + code;
L.i(TAG, logs);
}
// T.show(getApplicationContext(),logs);
}
};
private final Handler jpushHandler = new Handler() {
@Override
public void handleMessage(android.os.Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case MSG_SET_ALIAS:
L.i(TAG, "Set alias in handler.");
JPushInterface.setAliasAndTags(getApplicationContext(),
(String) msg.obj, null, mAliasCallback);
break;
// case MSG_SET_TAGS:
// Log.d(TAG, "Set tags in handler.");
// JPushInterface.setAliasAndTags(getApplicationContext(), null,
// (Set<String>) msg.obj, mTagsCallback);
// break;
default:
L.i(TAG, "Unhandled msg - " + msg.what);
}
}
};
}
在主Activity中即
<application
android:name="com.shipping.application.ShippingApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/NormalTheme" >
<activity
android:name="com.shipping.activity.WelcomeActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
的onResume / onPause添加
JPushInterface.onResume(
this
);和
JPushInterface.onPause(
this
);
package com.shipping.activity;
import cn.jpush.android.api.JPushInterface;
import com.shipping.R;
import com.shipping.app.App;
import com.shipping.guide.GuideActivity;
import com.shippingframework.activity.BaseActivity;
import com.shippingframework.services.TokenService;
import com.shippingframework.services.UserService;
import com.shippingframework.sharedpreferences.AppSharedPreferences;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
public class WelcomeActivity extends ShipBaseActivity{
private AppSharedPreferences appSP;
// 延迟1秒
private static final long SPLASH_DELAY_MILLIS = 1000*2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
instance=this;
setContentView(R.layout.activity_welcome);
new App(instance);
appSP=new AppSharedPreferences(instance,AppSharedPreferences.APP_SHAREPRE_FILE);
ApplicationInit();
// 使用Handler的postDelayed方法,3秒后执行跳转到MainActivity
new Handler().postDelayed(new Runnable() {
public void run() {
goHome();
}
}, SPLASH_DELAY_MILLIS);
}
private void ApplicationInit(){
//获取token
TokenService tokenService=new TokenService(instance);
tokenService.GetAccessToken();
//系统自动登录
UserService userService=new UserService(instance);
userService.AutoLogin();
}
private void goHome() {
if (appSP.getAppIsFirstRun()) {
appSP.setAppIsFirstRun(false);
Intent intent = new Intent(WelcomeActivity.this,GuideActivity.class);
WelcomeActivity.this.startActivity(intent);
WelcomeActivity.this.finish();
} else {
Intent intent = new Intent(WelcomeActivity.this, MainActivity.class);
WelcomeActivity.this.startActivity(intent);
WelcomeActivity.this.finish();
}
}
@Override
protected void onResume() {
super.onResume();
JPushInterface.onResume(this);
}
@Override
protected void onPause() {
super.onPause();
JPushInterface.onPause(this);
}
}
JPushInterface.onResume(this)开如统计,
JPushInterface.onPause(this);结束统计