package com.yyquan.jzh.xmpp; import android.annotation.TargetApi; import android.app.ActivityManager; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.AsyncQueryHandler; import android.content.BroadcastReceiver; import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.os.Build; import android.util.Log; import com.google.gson.Gson; import com.yyquan.jzh.R; import com.yyquan.jzh.activity.ChatActivity; import com.yyquan.jzh.entity.User; import com.yyquan.jzh.entity.XmppChat; import com.yyquan.jzh.entity.XmppFriend; import com.yyquan.jzh.entity.XmppMessage; import com.yyquan.jzh.entity.XmppUser; import com.yyquan.jzh.util.SharedPreferencesUtil; import com.yyquan.jzh.util.TimeUtil; import java.util.HashMap; import java.util.List; /** * Created by jzh on 2016/1/8. */ public class XmppReceiver extends BroadcastReceiver { updateActivity ua = null; public NotificationManager manager = null; public XmppReceiver(updateActivity ua) { this.ua = ua; } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) @Override public void onReceive(Context context, Intent intent) { String type = intent.getStringExtra("type"); if (type.equals("chat")) { XmppChat xc = (XmppChat) intent.getSerializableExtra("chat"); if (ChatActivity.ca != null) { //在chat界面更新信息 Log.i("xmpppppp", ChatActivity.xf.getUser().getUser() + "\t" + xc.getNickname()); if (ChatActivity.xf.getUser().getUser().equals(xc.getUser())) { ua.update(xc); } chatDatas(xc.getMain(), xc.getUser(), xc.getToo(), xc.getContent()); } else { int num = chatData(xc.getMain(), xc.getUser(), xc.getToo(), xc.getContent()); if (XmppService.vibrator != null && SharedPreferencesUtil.getBoolean(context, "tishi", "zhendong", true)) { XmppService.vibrator.vibrate(500); } if (!isAppOnForeground(context)) { //在message界面更新信息 if (manager == null) { manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); } Intent intent1 = new Intent(context, ChatActivity.class); User users = new User(); users.setUser(xc.getUser()); users.setNickname(xc.getNickname()); intent1.putExtra("xmpp_friend", new XmppFriend(users)); PendingIntent pi = PendingIntent.getActivity(context, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT); Notification notify = new Notification.Builder(context) .setAutoCancel(true) .setTicker("有新消息") .setSmallIcon(R.mipmap.ic_icon2) .setContentTitle("来自" + xc.getNickname() + "的消息") .setContentText(xc.getContent()) .setDefaults(Notification.DEFAULT_SOUND) .setWhen(System.currentTimeMillis()) .setNumber(num) .setContentIntent(pi).build(); manager.notify(0, notify); } else { if (XmppService.pool != null && SharedPreferencesUtil.getBoolean(context, "tishi", "music", true)) { XmppService.pool.play(1, 1, 1, 0, 0, 1); } } } } ua.update(type); } public interface updateActivity { public void update(String type); public void update(XmppChat xc); } public int chatData(final String main, final String users, final String to, final String content) { Cursor cursor = XmppService.resolver.query(XmppContentProvider.CONTENT_MESSAGES_URI, null, "main=? and type=?", new String[]{main, "chat"}, null); if (!cursor.moveToFirst()) { //插入 List<XmppUser> list1 = XmppTool.getInstance().searchUsers(users); Log.i("XmppService_add", list1.get(0).getUserName() + "\n" + list1.get(0).getName()); XmppMessage xm = new XmppMessage(to, "chat", new XmppUser(list1.get(0).getUserName(), list1.get(0).getName()), TimeUtil.getDate(), content, 1, main ); XmppContentProvider.add_message(xm); return 1; } else { //更新 int id = cursor.getInt(cursor.getColumnIndex("id")); int result = cursor.getInt(cursor.getColumnIndex("result")); ContentValues values = new ContentValues(); values.put("content", content); values.put("time", TimeUtil.getDate()); values.put("result", (result + 1)); XmppService.resolver.update(XmppContentProvider.CONTENT_MESSAGES_URI, values, "id=?", new String[]{id + ""}); return (result + 1); } } public void chatDatas(final String main, final String users, final String to, final String content) { Cursor cursor = XmppService.resolver.query(XmppContentProvider.CONTENT_MESSAGES_URI, null, "main=? and type=?", new String[]{main, "chat"}, null); if (!cursor.moveToFirst()) { //插入 List<XmppUser> list1 = XmppTool.getInstance().searchUsers(users); Log.i("XmppService_add", list1.get(0).getUserName() + "\n" + list1.get(0).getName()); XmppMessage xm = new XmppMessage(to, "chat", new XmppUser(list1.get(0).getUserName(), list1.get(0).getName()), TimeUtil.getDate(), content, 0, main ); XmppContentProvider.add_message(xm); } else { //更新 int id = cursor.getInt(cursor.getColumnIndex("id")); ContentValues values = new ContentValues(); values.put("content", content); values.put("time", TimeUtil.getDate()); values.put("result", 0); XmppService.resolver.update(XmppContentProvider.CONTENT_MESSAGES_URI, values, "id=?", new String[]{id + ""}); } } public boolean isAppOnForeground(Context context) { // Returns a list of application processes that are running on the // device ActivityManager activityManager = (ActivityManager) context.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE); String packageName = context.getApplicationContext().getPackageName(); List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager .getRunningAppProcesses(); if (appProcesses == null) return false; for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) { // The name of the process that this object is associated with. if (appProcess.processName.equals(packageName) && appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { return true; } } return false; } }