移动端 信鸽测试应用代码:
移动端主要实现对信鸽服务的集成。对信鸽推送过来的消息的获取解析以及展示。 暂时没有对通知类消息的点击做出响应操作。同时也省略了对信鸽服务在腾讯官网的注册、在 项目中进行配置的过程。
1.测试MainActivity.java
import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.tencent.android.tpush.XGPushClickedResult; import com.tencent.android.tpush.XGPushManager; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private TextView mTextView; private ListView mListView; private MyListViewAdapter mMyListViewAdapter; private List<NotificationTips> list = new ArrayList<>(); private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EventBusUtil.register(this); registerXG(); initView(); } @Override protected void onStart() { super.onStart(); XGPushClickedResult clickedResult = XGPushManager.onActivityStarted(this); if (clickedResult != null) { String title = clickedResult.getTitle(); Log.v("TPush", "title:" + title); String id = clickedResult.getMsgId() + ""; Log.v("TPush", "id:" + id); String content = clickedResult.getContent(); Log.v("TPush", "content:" + content); } } @Override protected void onDestroy() { super.onDestroy(); EventBusUtil.unregister(this); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); } private void initView() { mTextView = (TextView) findViewById(R.id.device_token); mListView = (ListView) findViewById(R.id.lv); } public void onEventMainThread(ResponseEvent event) { String msg = "onEventMainThread收到了消息:" + event.getMessage(); Log.i(TAG, msg); mTextView.setText(msg); if (!event.isOK()) { Toast.makeText(this, event.getMessage(), Toast.LENGTH_SHORT).show(); return; } } public void onEventMainThread(NotificationTips notificationTips) { String msg = "onEventMainThread收到了消息:" + notificationTips.getContent(); Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); list.add(0, notificationTips); if (mMyListViewAdapter == null) { mMyListViewAdapter = new MyListViewAdapter(this); } mMyListViewAdapter.setList(list); mListView.setAdapter(mMyListViewAdapter); } private void registerXG() { XGPushUtil.registerPush(this, "test", XGRegisterCallback.getInstance()); } }
2 消息分发工具EventBusUtil.java类
import de.greenrobot.event.EventBus; /** * Created by Administrator on 2017/4/12. */ public class EventBusUtil { public static void register(Object subscriber) { EventBus.getDefault().unregister(subscriber); EventBus.getDefault().register(subscriber); } public static void register(Object subscriber, String methodName) { EventBus.getDefault().register(subscriber, methodName); } public static void unregister(Object subscriber) { EventBus.getDefault().unregister(subscriber); } public static void post(Object event) { EventBus.getDefault().post(event); } }
3定义EventBus传递消息的对象实体
public class ResponseEvent { public static final int STATUS_OK = 1; public static final int STATUS_ERROR = 0; private int id; private int status; private Object data; private String message; private Class<?> targetClass; public ResponseEvent(int id) { this.id = id; } public ResponseEvent(int id, int status) { this(id, status, null, ""); } public ResponseEvent(int id, int status, String message) { this(id, status, null, message); } public ResponseEvent(int id, int status, Object data) { this(id, status, data, ""); } public ResponseEvent(int id, int status, Object data, String message) { this.id = id; this.status = status; this.data = data; this.message = message; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } @SuppressWarnings("unchecked") public <T> T getData() { return (T) data; } public void setData(Object data) { this.data = data; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Class<?> getTargetClass() { return targetClass; } public void setTargetClass(Class<?> targetClass) { this.targetClass = targetClass; } public boolean isForTarget(Object target) { if (target == null) { return false; } return target.getClass().getSimpleName().equals(targetClass.getSimpleName()); } public boolean isOK() { return this.status == STATUS_OK; } }
4 消息传递状态常量类
public class ResponseEventStatus { private static final int EVENT_BASE = 10000000; public static final int OK = 1; public static final int ERROR = 0; public static final int NOTIFICATION_BASE = EVENT_BASE + 4000; public static final int NOTIFICATION_REGISTER_FAIL = NOTIFICATION_BASE + 1; public static final int NOTIFICATION_REGISTER_SUCCESS = NOTIFICATION_BASE + 2; }
5 信鸽消息接收类
public class MyMessageReceiver extends XGPushBaseReceiver { private static final String TAG = "MyMessageReceiver"; @Override public void onRegisterResult(Context context, int i, XGPushRegisterResult xgPushRegisterResult) { Log.i("MainActivity", "onRegisterResult="); } @Override public void onUnregisterResult(Context context, int i) { Log.i("MainActivity", "onUnregisterResult="); if (context == null) { return; } String text = ""; if (i == XGPushBaseReceiver.SUCCESS) { text = "反注册成功"; } else { text = "反注册失败" + i; } show(context, text); } @Override public void onSetTagResult(Context context, int i, String s) { Log.i("MainActivity", "onSetTagResult="); } @Override public void onDeleteTagResult(Context context, int i, String s) { Log.i("MainActivity", "onDeleteTagResult="); } @Override public void onTextMessage(Context context, XGPushTextMessage xgPushTextMessage) { Log.i("MainActivity", "onTextMessage="); String text = "收到了消息 :" + xgPushTextMessage.getContent(); show(context, text); Log.i("MainActivity", text); } @Override public void onNotifactionClickedResult(Context context, XGPushClickedResult xgPushClickedResult) { Log.i("MainActivity", "onNotifactionClickedResult="); } @Override public void onNotifactionShowedResult(Context context, XGPushShowedResult xgPushShowedResult) { show(context, "您有1条新消息, " + "通知被展示 , " + xgPushShowedResult.toString()); Log.i("MainActivity", "onNotifactionShowedResult=" + xgPushShowedResult.toString()); NotificationTips notificationTips; String content = xgPushShowedResult.getContent(); if (content != null && content.length() > 0) { notificationTips = new NotificationTips(); notificationTips.setContent(content); notificationTips.setTitle(xgPushShowedResult.getTitle()); notificationTips.setId(xgPushShowedResult.getMsgId()); notificationTips.setNotificationType(xgPushShowedResult.getNotificationActionType()); EventBusUtil.post(notificationTips); } } private void show(Context context, String text) { Toast.makeText(context, text, Toast.LENGTH_SHORT).show(); } }
6 信鸽注册回调类
import com.tencent.android.tpush.XGIOperateCallback; /** * Created by Administrator on 2017/4/12. */ public class XGRegisterCallback implements XGIOperateCallback { private static XGRegisterCallback instance; public XGRegisterCallback() { } static { instance = new XGRegisterCallback(); } public static XGRegisterCallback getInstance() { return instance; } @Override public void onSuccess(Object o, int i) { Log.i("this", "onSuccess=="); String successMsg = "通知注册功能成功。"; EventBusUtil.post(new ResponseEvent(ResponseEventStatus.NOTIFICATION_REGISTER_SUCCESS, ResponseEventStatus.OK, successMsg)); } @Override public void onFail(Object o, int i, String s) { Log.i("this", "onFail=="); String errorMsg = "通知注册功能失败,可能不能及时通知您!"; EventBusUtil.post(new ResponseEvent(ResponseEventStatus.NOTIFICATION_REGISTER_FAIL, ResponseEventStatus.ERROR, errorMsg)); } }
信鸽推送工具类
public class XGPushUtil { private static final String MIN_VERSION = "2.46"; public static void registerPush(Context context, String account, XGIOperateCallback registerCallback) { XGPushManager.registerPush(context.getApplicationContext(), account, registerCallback); if (MIN_VERSION.compareToIgnoreCase(DeviceUtil.getAndroidVersion()) > 0) { Intent service = new Intent(context, XGPushService.class); context.startService(service); } } }
7 消息实体类
public class NotificationTips { private String content; private long id; private String title; private int notificationType; public String getContent() { return content; } public void setContent(String content) { this.content = content; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public int getNotificationType() { return notificationType; } public void setNotificationType(int notificationType) { this.notificationType = notificationType; } }
8 接收到消息负责展示消息的listView的dapter
public class MyListViewAdapter extends BaseAdapter { private List<NotificationTips> mNotificationTipsList; private LayoutInflater mLayoutInflater; public MyListViewAdapter(Context context) { mLayoutInflater = LayoutInflater.from(context); } @Override public int getCount() { return mNotificationTipsList.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView = mLayoutInflater.inflate(R.layout.listview_item, null); ViewHolder viewHolder = new ViewHolder(convertView); convertView.setTag(viewHolder); viewHolder.mTVTitle.setText(mNotificationTipsList.get(position).getTitle()); viewHolder.mTVContent.setText(mNotificationTipsList.get(position).getContent()); return convertView; } public void setList(List<NotificationTips> list) { this.mNotificationTipsList = list; notifyDataSetChanged(); } static class ViewHolder { private TextView mTVTitle; private TextView mTVContent; private ImageView mIV; public ViewHolder(View view) { mTVTitle = (TextView) view.findViewById(R.id.tv_title); mTVContent = (TextView) view.findViewById(R.id.tv_content); mIV = (ImageView) view.findViewById(R.id.iv_icon); } } }
9 其他的工具类
public class DeviceUtil { public static String getAndroidVersion() { return android.os.Build.VERSION.RELEASE; } }