package activity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import org.json.JSONException;
import org.json.JSONObject;
import com.example.chatsysdemo.R;
import synProcess.LocalDataProcess;
import messageClasses.ChatContentMessage;
import messageClasses.Friends;
import messageClasses.Message;
import messageClasses.MsgViewContainer;
import messageClasses.MyAdapter;
import messageClasses.OnlineStatusChangeMessage;
import commontool.CommonFunctions;
import commontool.Constants;
import commontool.Controller;
import commontool.DataController;
import ServerInteract.HttpRequestServer;
import ServerInteract.SocketInteractServer;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
public class ActChat extends Activity {
public static final String TAG = "ActChat";
private final static int TIMEINTEVAL=15; //5秒没人操作则自动获取服务器的数据发
private final static int GETRESPONSE=1;
private int autoMsgNum;
private Friends friend;
private EditText edtMsg;
private TextView tvGuest;
private TextView tvStatus;
private Button btnSend;
private ListView lvMessage;
private String lastMsgString="";
private boolean isReportGenerated=false;
//private SimpleAdapter listItemAdapter;
// private ArrayList<HashMap<String, Object>> listItem;
private MyAdapter myAdapter;
private ImageView ivHead;
private boolean isResponsed=false;
// private ArrayList<String> topicList;
private String selectedTopic="null";
SocketInteractServer msgSocket = null;
private MySMSReceiver smsReceiver = null;
AutoSendMsg autoSendMsg;
// 保存新的消息,用于之后将新的消息记录保存到数据库中
private ArrayList<ChatContentMessage> newMessageList = new ArrayList<ChatContentMessage>();
private int times=TIMEINTEVAL;//无操作时间三十秒则选择自聊天
private boolean timeLock=true;
public synchronized boolean isTimeLocked()
{
return timeLock;
}
public synchronized void lock()
{
timeLock=true;
}
public synchronized void unlock()
{
timeLock=false;
}
public synchronized void resetTime()
{
times=TIMEINTEVAL;
}
public synchronized void resetTime(int t)
{
times=t;
}
public synchronized void minusTime()
{
times--;
}
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if(msg.what==GETRESPONSE)
{
String content=msg.obj.toString();
Log.v(TAG, "handle接受到自动聊天内荣:(待发送)"+content);
sendMsg(content);
autoMsgNum--;
if(0==autoMsgNum)
{
sendMsg("/*/over/*/");
autoSendMsg.endThread();
generateChatReport();
}
}
}
};
public class AutoSendMsg implements Runnable{
private boolean isContinue=true;
@Override
public void run() {
// TODO Auto-generated method stub
while (isContinue) {
try {
Thread.sleep(1000);//线程暂停10秒,单位毫秒
if(isTimeLocked())
continue;
minusTime();
if(times==0 || isResponsed==true)
{
if(isResponsed==true)
{
// isResponsed=false; //等待从服务器获得数据发送数
lock(); //停止计数器
new Thread(new GetServerMsgThread()).run();
}
resetTime();
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
CommonFunctions.generateLogV(TAG, "停止AutoSendMsg线程");
}
public void endThread()
{
isContinue=false;
}
}
public class GetServerMsgThread implements Runnable
{
@Override
public void run() {
// TODO Auto-generated method stub
//向服务器请求获得自聊天消息
Log.v(TAG, "向服务器请求聊天内容");
HttpRequestServer requestServer = new HttpRequestServer();
JSONObject jobj = null;
try {
if(selectedTopic.equals("null"))
{
Log.v(TAG,"所选话题为空!");
selectedTopic="天气";
}
jobj=requestServer.getAutoChatMsg(Controller.getUserId(), selectedTopic, lastMsgString);
Log.v(TAG, "获得聊天内容:"+jobj.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
Log.v(TAG, "error");
e.printStackTrace();
unlock();
}
if(jobj==null)
return ;
String content="null";
try {
content = (String) jobj.get(Constants.MESSAGE_CONTENT);
CommonFunctions.generateLogV(TAG, content);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
unlock();
}
int len=CommonFunctions.generateRandamNum(6, 12);
try {
Thread.sleep(len*1000); //延迟
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.obtainMessage(GETRESPONSE, content).sendToTarget();
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
Log.v(TAG, "onPause");
super.onPause();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v(TAG, "onCreate");
setContentView(R.layout.chat);
getInstance();
fillAdapter();
// 添加并且显示
// lvMessage.setAdapter(listItemAdapter);
lvMessage.setAdapter(myAdapter);
btnSend.setOnClickListener(new btnSendClickOmpl());
IntentFilter myIntentFilter = new IntentFilter();
myIntentFilter.addAction(Constants.SMS_RECEIVER_CHAT);
smsReceiver = new MySMSReceiver();
registerReceiver(smsReceiver, myIntentFilter);
if(Controller.getChatStatus().equals("Positive"))
isResponsed=true;//可主动发起聊天
else {
isResponsed=false;//不可主动发起聊天
}
if(friend!=null && friend.type!=1)
{
autoMsgNum=5; //自动交流10句之后停止并生成报告
unlock();
autoSendMsg=new AutoSendMsg();
new Thread(autoSendMsg).start();
}
Controller.setCurrentActivity(TAG);
}
private void getInstance() {
Intent requestIntent = getIntent();
int userId = requestIntent.getIntExtra(Constants.USER_ID,-1);
friend=Controller.getFriendbyId(userId);
if(friend==null)
{
friend=new Friends(userId, "null", "1", Constants.ONLINE);
friend.type=2;
}
//还得设置头像
tvGuest = (TextView) findViewById(R.id.tvguestName);
tvStatus=(TextView) findViewById(R.id.tvguestStatus);
tvStatus.setText(friend.status);
ivHead=(ImageView)findViewById(R.id.guestImage);
ivHead.setImageResource(DataController.head[Integer.parseInt(friend.headImageUrl)]);
if(friend.status.equals(Constants.OFFLINE))
ivHead.setImageAlpha(100);
edtMsg = (EditText) findViewById(R.id.editMessage);
btnSend = (Button) findViewById(R.id.buttonSend);
lvMessage = (ListView) findViewById(R.id.lvMessage);
myAdapter=new MyAdapter(this);
String guestName=Controller.getNameById(userId);
tvGuest.setText(guestName);
// 获得与服务器的Socket连接(在主界面已经建立连接)
msgSocket = Controller.getMsgSocket();
//获得自动聊天的话题,已经从服务器获得
selectedTopic=Controller.getSelectedTopic();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
// 注销服务
Log.v(TAG, "onDestroy");
if(autoSendMsg!=null)
autoSendMsg.endThread();
if (smsReceiver != null)
unregisterReceiver(smsReceiver);
// 重置当前聊天对象
if(1==friend.type)
{
Controller.setCurrentChatObjId(-1);
//Controller.setCurrentChatobjName("");
}
else
{
Controller.setCurrentMachChatObjId(-1);
//Controller.setCurrentMachChatObjName("");
}
// 将聊天记录保存到本地数据库中
LocalDataProcess localDataProcess=new LocalDataProcess();
localDataProcess.upLocalNewMessageRecord(newMessageList);
this.finish();
super.onDestroy();
}
private class MySMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String messageString;
messageString = intent.getStringExtra(Constants.BROADCAST_MESSAGE);
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(messageString);
} catch (JSONException e) {
// TODO Auto-generated catch block
CommonFunctions.generateLogV(TAG,
"new JSONObject(messageString);", "JSONException");
e.printStackTrace();
}
Message message = CommonFunctions
.castJsonToMessage(jsonObject);
parseMessage(message);
}
}
/**
* 解析接收到的消息
* @param message
*/
protected void parseMessage(Message message)
{
Log.v(TAG,"接收到广播消息:"+message.toString());
String typeString=message.type;
if(typeString.equals(Constants.CHAT_MESSAGE))
{
ChatContentMessage chatContentMessage=(ChatContentMessage)message;
lastMsgString=chatContentMessage.msg;
if(lastMsgString.equals("/*/over/*/"))
{
autoSendMsg.endThread();//自动聊天结束,生成报告
generateChatReport();
return ;
}
appendMsg(chatContentMessage);
isResponsed=true; //收到回复之后标记置为true
Log.v(TAG, String.valueOf(isResponsed));
resetTime();
//handler.obtainMessage(1, lastMsgString).sendToTarget();
}
else if(typeString.equals(Constants.FRIEND_ONLINE_STATUS_CHANGE))
{
OnlineStatusChangeMessage onlineStatusChangeMessage=(OnlineStatusChangeMessage)message;
if(onlineStatusChangeMessage.userId==friend.userId)
{
friend.status=onlineStatusChangeMessage.status;
if(friend.status.equals(Constants.ONLINE))
ivHead.setImageAlpha(0);
else
ivHead.setImageAlpha(100);
tvStatus.setText("["+friend.status+"]");
}
}
}
private void generateChatReport() {
// TODO Auto-generated method stub
if(isReportGenerated==false)
{
isReportGenerated=true;
CommonFunctions.showMessage(ActChat.this, "自动聊天结束,显示聊天结果");
Intent intent=new Intent(ActChat.this,ActReport.class);
startActivity(intent);
}
}
public class btnSendClickOmpl implements android.view.View.OnClickListener {
@Override
public void onClick(View v) {
String msg = edtMsg.getText().toString().trim();
sendMsg(msg);
}
}
private void fillAdapter() {
// listItem = new ArrayList<HashMap<String, Object>>();
// 生成适配器的Item和动态数组对应的元素
// listItemAdapter = new SimpleAdapter(this, listItem,// 数据源
// R.layout.chat_message_item,// ListItem的XML实现
// 动态数组与ImageItem对应的子项
// new String[] { Constants.USER_NAME, Constants.SEND_TIME,
// Constants.MESSAGE_CONTENT,Constants.USER_ID },
// ImageItem的XML文件里面的一个ImageView,两个TextView ID
// new int[] { R.id.MsgSender, R.id.MsgDateTime, R.id.MsgContent });
//先从数据库获得历史记录,
addHistoryMessage();
// 获得未读消息
ArrayList<ChatContentMessage> messageList = (ArrayList<ChatContentMessage>) Controller
.getUnreadMessage(friend.userId);
if (messageList != null)
addUnreadMessage(messageList);
// 这句不要往,不然列表控件显示不会更新
// listItemAdapter.notifyDataSetChanged();
myAdapter.notifyDataSetChanged();
// 清除未读消息
Controller.clearUnreadMessage(friend.userId);
}
protected void sendMsg(String msg) {
// TODO Auto-generated method stub
// 发送送消息,默认消息类型为Constants.CHAT_MESSAGE
// resetTime(); //自动发送消息计时器重新计时
// if (msg == "")
// return;
//
// if (false == msgSocket.isConnected()) {
// CommonFunctions.showMessage(ActChat.this,
// "发送数据的SOCKET尚未连接到服务器!");
// return;
// }
// if(friend.status.equals(Constants.OFFLINE)) {
// CommonFunctions.showMessage(ActChat.this,
// "当前用户已离线!");
// return;
// }
ChatContentMessage message = new ChatContentMessage(Constants.CHAT_MESSAGE,Controller.getUserId(), friend.userId,
msg, CommonFunctions.getSysTime());
String msgPackage = null;
try {
msgPackage = CommonFunctions.castMessageclassToJsonStr(message);
} catch (JSONException e) {
// TODO Auto-generated catch block
Log.v(TAG,"CommonFunctions.castMessageclassToJsonStr(message)失败:JSONException");
e.printStackTrace();
}
boolean result = msgSocket.writeStr(msgPackage);
isResponsed=false;//发送消息之后是否已经回复标记置为false;
if (result == true) {
// 将数据更新到消息界面......................................
appendMsg(message);
// 清空数据
edtMsg.setText("");
edtMsg.requestFocus();
} else {
CommonFunctions.showMessage(ActChat.this, "消息发送失败,请重试");
edtMsg.requestFocus();
}
}
public void appendMsg(ChatContentMessage message) {
if
newMessageList.add(message);
/*
HashMap<String, Object> map = new HashMap<String, Object>();
String name=Controller.getNameById(message.senderId);
map.put(Constants.USER_ID, message.senderId);
map.put(Constants.USER_NAME, name);
map.put(Constants.SEND_TIME, message.time);
map.put(Constants.MESSAGE_CONTENT, message.msg);
listItem.add(map);
listItemAdapter.notifyDataSetChanged();
*/
Log.v("MESSAGE", message.msg);
MsgViewContainer msg=null;
if(message.senderId==friend.userId)
{
msg =new MsgViewContainer(1, DataController.head[Integer.parseInt(friend.headImageUrl)],
friend.userName, message.time, message.msg);
}
else
{
//自己头像暂时写死
msg =new MsgViewContainer(2, DataController.head[Controller.getUserId()%8],
Controller.getUserName(), message.time, message.msg);
}
myAdapter.addMessage(msg);
myAdapter.notifyDataSetChanged();
resetTime();
unlock();//
}
private void addUnreadMessage(ArrayList<ChatContentMessage> messageList) {
if (messageList == null)
return;
Iterator<ChatContentMessage> iterator = messageList.iterator();
ChatContentMessage message=null;
while (iterator.hasNext()) {
// HashMap<String, Object> map = new HashMap<String, Object>();
message = iterator.next();
// map.put(Constants.USER_ID, message.senderId);
// String name=Controller.getNameById(message.senderId);
// map.put(Constants.USER_NAME, name);
// map.put(Constants.MESSAGE_CONTENT, message.msg);
// map.put(Constants.SEND_TIME, message.time);
// listItem.add(map);
appendMsg(message);
// 将未读消息加入到新消息队列,便于之后保存到数据库中
// newMessageList.add(message);
}
if(message!=null)
lastMsgString=message.msg;
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
Log.v(TAG, "onStop");
super.onStop();
}
private void addHistoryMessage() {
// 查询本地数据库获得聊天记录
// List<ChatContentMessage> historyMsgList = dbManager
// .queryMessagesRecord(hostName, friend.userName);
List<ChatContentMessage> historyMsgList =null;
LocalDataProcess localDataProcess=new LocalDataProcess();
historyMsgList=localDataProcess.downLoadHistoryMessageRecord(Controller.getUserId(), friend.userId);
Iterator<ChatContentMessage> iterator = historyMsgList.iterator();
while (iterator.hasNext()) {
ChatContentMessage messageClass = iterator.next();
appendMsg(messageClass);
/*
HashMap<String, Object> map = new HashMap<String, Object>();
int id=messageClass.senderId;
String name=Controller.getNameById(id);
map.put(Constants.USER_ID, id);
map.put(Constants.USER_NAME, name);
map.put(Constants.MESSAGE_CONTENT, messageClass.msg);
map.put(Constants.SEND_TIME, messageClass.time);
listItem.add(map);
*/
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
Log.v(TAG, "keydown");
if (keyCode == KeyEvent.KEYCODE_BACK) {
if(autoSendMsg!=null)
autoSendMsg.endThread();
this.finish();
return super.onKeyDown(keyCode, event);
}
else if(keyCode == KeyEvent.KEYCODE_F10)
{
if(autoSendMsg!=null)
autoSendMsg.endThread();
}
return false;
}
}
package activity;
import java.util.ArrayList;
import java.util.HashMap;
import messageClasses.OnlineStatusChangeMessage;
import messageClasses.OpenSessionMessage;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Vibrator;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Toast;
import com.example.chatsysdemo.R;
import commontool.CommonFunctions;
import commontool.Constants;
import commontool.Controller;
import commontool.DataController;
public class ActFinding extends Activity {
public final static String TAG = "ActFinding";
private SensorManager sensorManager;
private Vibrator vibrator;
private final static int SENSOR_SHAKE=10;
private final static int GetServerData=8;
private final static int StartChat=6;
private final static int TIMEINTEVAL=15;
// private Button btnSearch;
private ImageView ivNotice;
private String userName;
private int userId;
private ListView lvfoundFriends;
private ArrayList<HashMap<String, Object>> listItem;
private SimpleAdapter listItemAdapter;
private MySMSReceiver smsReceiver = null;
private static int times=TIMEINTEVAL;//无操作时间三十秒则选择自聊天
private ChoseObjThread choseObjThread=null;
private FillDataThread fillDataThread=null;
public static synchronized void resetTime()
{
times=TIMEINTEVAL;
}
public static synchronized void minusTime()
{
times--;
}
Handler handler = new Handler() {
public void handleMessage(Message Message) {
//要做的事情
switch(Message.what)
{
case SENSOR_SHAKE:
if(choseObjThread==null)
{
CommonFunctions.showMessage(ActFinding.this, "开启自动聊天模式,再摇一次关闭自动聊天模式");
fillDataThread=new FillDataThread();
new Thread(fillDataThread).start();
}
else
{
CommonFunctions.showMessage(ActFinding.this, "关闭启自动聊天模式,再摇一次开启自动聊天模式");
Log.v(TAG, "关闭启自动聊天模式,再摇一次开启闭自动聊天模式");
choseObjThread.endThread();
choseObjThread=null;
}
break;
case GetServerData :
if(listItem.size()<=0 || Controller.getChatStatus().equals("Negative") || Controller.getCurrentMachChatObjId()!=-1)
break;
fillData();
if(choseObjThread!=null)
{//开启定时自动聊线程
choseObjThread.endThread();
choseObjThread=null;
}
Log.v(TAG, "开启自动聊天模式,再摇一次关闭自动聊天模式");
choseObjThread = new ChoseObjThread();
new Thread(choseObjThread).start();
break;
case StartChat:
if(Controller.getChatStatus().equals("Negative") || Controller.getCurrentMachChatObjId()!=-1)
return ;
if(Controller.getOthersFriendsList()!=null && Controller.getOthersFriendsList().size()>0)
{
autoChat(0);// 默认找第一个人聊
}
break;
default:
break;
}
}
};
public class FillDataThread implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
try {
listItem=DataController.fillData(ActFinding.this, userId,2);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Message message=new Message();
message.what=GetServerData;
handler.sendMessage(message);//发送消息
}
}
public class ChoseObjThread implements Runnable{
private boolean isContinue=true;
@Override
public void run() {
// TODO Auto-generated method stub
while (isContinue) {
try {
if(Controller.getChatStatus().equals("Negative"))
{
resetTime();
continue;//被动方式,不主动发起会话,但保持循环监听是否设置为Positive模式
}
Thread.sleep(1000);//线程暂停1秒
minusTime();
if(times==0)
{
Message message=new Message();
message.what=StartChat;
handler.sendMessage(message);//发送消息
resetTime();
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
CommonFunctions.generateLogV(TAG, "停止ChoseObjThread");
}
public void endThread()
{
isContinue=false;
}
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
Log.v(TAG, "keydown");
return false;
// return super.onKeyDown(keyCode, event);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v(TAG, "onCreate");
setContentView(R.layout.finding_list);
//if(自动机器人聊天)
// fillData();
getInstance();
// if(Controller.getChatStatus().equals("Positive"))
//lz12/21 choseObjThread= new ChoseObjThread();
//lz12/21 new Thread(choseObjThread).start();
// btnSearch.setOnClickListener(new OnClickListener() {
// @Override
// public void onClick(View arg0) {
// // TODO Auto-generated method stub
// fillData();
// }
// });
lvfoundFriends.setOnItemClickListener(new lvItemClickListener());
IntentFilter myIntentFilter = new IntentFilter();
//myIntentFilter.addAction(Constants.SMS_RECEIVER_GUEST);
myIntentFilter.addAction(Constants.SMS_RECEIVER_Finding);
smsReceiver = new MySMSReceiver();
registerReceiver(smsReceiver, myIntentFilter);
if(sensorManager!=null)
{
Log.v(TAG, "regist");
sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor
(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
}
}
public class lvItemClickListener implements OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> lv, View view, int position,
long id) {
times=60;
HashMap<String, Object> map = (HashMap<String, Object>) listItem
.get(position);
int userId = (Integer) map.get("fi_user_id");
Intent intent=new Intent(ActFinding.this,ActPersonalInfo.class);
intent.putExtra(Constants.USER_ID, userId);
startActivity(intent);
}
}
private void autoChat(int position)
{
HashMap<String, Object> map = (HashMap<String, Object>) listItem
.get(position);
int id=(Integer)map.get("fi_user_id");
OpenSessionMessage opMessage=new OpenSessionMessage();
opMessage.type=Constants.OPEN_SESSION;
opMessage.friendType=2; //非好友
opMessage.time=CommonFunctions.getSysTime();
opMessage.userId=id;
String messageString = null;
try {
messageString = CommonFunctions.castMessageclassToJsonStr(opMessage);
} catch (JSONException e) {
CommonFunctions.generateLogV(TAG, "CommonFunctions.castMessageclassToJsonStr(opMessage);", "JSONException");
e.printStackTrace();
}
CommonFunctions.sendMyBroadcast(ActFinding.this, messageString, Constants.SMS_RECEIVER_SESSION);
startChat(id,position);
}
private void startChat(int _id,int position) {
// TODO Auto-generated method stub
Intent intentAct = new Intent(ActFinding.this, ActChat.class);
intentAct.putExtra(Constants.USER_ID, _id);
intentAct.putExtra("type", 2);
// 设置当前聊天对象
Controller.setCurrentMachChatObjId(_id);
startActivity(intentAct);
}
private class MySMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String messageString;
messageString = intent.getStringExtra(Constants.BROADCAST_MESSAGE);
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(messageString);
} catch (JSONException e) {
CommonFunctions.generateLogV(TAG,
"new JSONObject(messageString)", "JSONException");
e.printStackTrace();
}
messageClasses.Message message = CommonFunctions
.castJsonToMessage(jsonObject);
parseMessage(message);
}
}
private void parseMessage(messageClasses.Message message) {
// String typeString=message.type;
/// if (typeString.equals(Constants.FRIEND_ONLINE_STATUS_CHANGE)) {
// OnlineStatusChangeMessage onlineStatusChangeMessage=(OnlineStatusChangeMessage)message;
// int position = 0;
// position=DataController.findTheListPositon(listItem,"fi_user_id", onlineStatusChangeMessage.userId);
// if(position==-1)
// return ;
// //改变在线状态
// DataController.changeListItemValue(2,onlineStatusChangeMessage.userId ,position,"fi_user_status", onlineStatusChangeMessage.status, listItem);
// Controller.changeUserStatus(onlineStatusChangeMessage.userId,onlineStatusChangeMessage.status);
// }
// if(listItemAdapter!=null)
// listItemAdapter.notifyDataSetChanged();
}
private void fillData(){
// TODO Auto-generated method stub
if(listItem==null)
return;
String[] froms=new String[] {"fi_user_image", "fi_user_name","fi_user_status","fi_user_location","fi_user_locDes","fi_user_id"};
int[] tos=new int[] { R.id.fi_user_image, R.id.fi_user_name,R.id.fi_user_status,R.id.fi_user_location,R.id.fi_user_locDes};
// try {
// listItem=DataController.fillData(ActFinding.this, userId,2);
// } catch (JSONException e) {
// // TODO Auto-generated catch block
// CommonFunctions.generateLogV(TAG, "friendslistPro.fillData(ActFriendsList.this, userId,2)", "JSONException");
// e.printStackTrace();
// }
if(listItem.size()>0)
{
ivNotice.setVisibility(View.GONE);
}
listItemAdapter = new SimpleAdapter(this,listItem,// 数据源
R.layout.finding_list_item,// ListItem的XML实现
froms,// 动态数组与ImageItem对应的子项
tos);// ImageItem的XML文件里面的一个ImageView,两个TextView ID
lvfoundFriends.setAdapter(listItemAdapter);
}
private void getInstance() {
lvfoundFriends = (ListView) findViewById(R.id.lvfoundFriends);
userName = Controller.getUserName();
userId = Controller.getUserId();
// btnSearch=(Button)findViewById(R.id.btnSearch);
ivNotice=(ImageView)findViewById(R.id.ivNotice);
sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
vibrator=(Vibrator)getSystemService(VIBRATOR_SERVICE);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if(sensorManager!=null)
{
sensorManager.unregisterListener(sensorEventListener);
}
if (smsReceiver != null)
unregisterReceiver(smsReceiver);
if(choseObjThread!=null)
choseObjThread.endThread();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.v(TAG, "onPause");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.v(TAG, "onResume");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.v(TAG, "onResume");
}
private SensorEventListener sensorEventListener =new SensorEventListener()
{
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
if(Controller.getCurrentActivity()!=TAG) //只有当停 留在当前窗口时才触发摇一摇事件
{
return ;
}
float[] values=event.values;
float x=values[0];
float y=values[1];
float z=values[2];
//Log.v(TAG, "X方向加速度"+x+";Y方向加速度"+y+";Z方向加速度"+z);
int medumValue=19;
if(Math.abs(x)>medumValue || Math.abs(y)>medumValue || Math.abs(z)>medumValue)
{
vibrator.vibrate(200);
Message msg=new Message();
msg.what=SENSOR_SHAKE;
handler.sendMessage(msg);
}
}
};
}
package activity;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import messageClasses.AddFriendMessage;
import messageClasses.ChatContentMessage;
import messageClasses.Friends;
import messageClasses.Message;
import messageClasses.OnlineStatusChangeMessage;
import messageClasses.OpenSessionMessage;
import messageClasses.Session;
import messageProcessPackage.SocketCommunicationService;
import messageProcessPackage.SocketCommunicationService.LocalBinder;
import org.apache.http.client.ClientProtocolException;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import sqliteDB.DBManager;
import com.example.chatsysdemo.R;
import commontool.*;
import android.R.integer;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.ServiceConnection;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import ServerInteract.HttpRequestServer;
public class ActFriendsList extends Activity{
public final static String TAG = "ActFriendsList";
private ListView lvFriends;
private String userName;
private int userId;
private ArrayList<HashMap<String, Object>> listItem;
private SimpleAdapter listItemAdapter;
private MySMSReceiver smsReceiver = null;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
Log.v(TAG, "keydown");
return false;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.friends_list);
Log.v(TAG, "onCreate");
getInstance();
fillData();
// startService方式启动服务
// Intent intent = new Intent("SocketCommunicationService");
// startService(intent);
// 启动广播接收器
IntentFilter myIntentFilter = new IntentFilter();
//myIntentFilter.addAction(Constants.SMS_RECEIVER_CHATMAIN);
myIntentFilter.addAction(Constants.SMS_RECEIVER_FRIENDSLIST);
smsReceiver = new MySMSReceiver();
registerReceiver(smsReceiver, myIntentFilter);
lvFriends.setOnItemClickListener(new lvItemClickListener());
}
private void fillData(){
// TODO Auto-generated method stub
String[] froms=new String[] { "fr_user_image", "fr_user_name","fr_user_status","fr_user_ivStatus","fr_user_id",};
int[] tos=new int[] { R.id.fr_user_image, R.id.fr_user_name, R.id.fr_user_status,R.id.fr_user_ivStatus};
try {
listItem=DataController.fillData(ActFriendsList.this, userId,1);
} catch (JSONException e) {
// TODO Auto-generated catch block
CommonFunctions.generateLogV(TAG, "friendslistPro.fillData(ActFriendsList.this, userId,1)", "JSONException");
e.printStackTrace();
}
listItemAdapter = new SimpleAdapter(this,listItem,// 数据源
R.layout.friends_list_item,// ListItem的XML实现
froms,// 动态数组与ImageItem对应的子项
tos);// ImageItem的XML文件里面的一个ImageView,两个TextView ID
lvFriends.setAdapter(listItemAdapter);
}
private class MySMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String messageString;
messageString = intent.getStringExtra(Constants.BROADCAST_MESSAGE);
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(messageString);
} catch (JSONException e) {
CommonFunctions.generateLogV(TAG,
"new JSONObject(messageString)", "JSONException");
e.printStackTrace();
}
Message message = CommonFunctions
.castJsonToMessage(jsonObject);
CommonFunctions.generateLogV("xxxxx11", message.toString());
parseMessage(message);
}
}
private void parseMessage(Message message) {
String typeString=message.type;
if (typeString.equals(Constants.FRIEND_ONLINE_STATUS_CHANGE)) {
OnlineStatusChangeMessage onlineStatusChangeMessage=(OnlineStatusChangeMessage)message;
CommonFunctions.generateLogV("status","change:"+onlineStatusChangeMessage.status);
int position = 0;
position=DataController.findTheListPositon(listItem, "fr_user_id",onlineStatusChangeMessage.userId);
//改变在线状态
if(-1==position)//非好友发送的消息
return ;
DataController.changeListItemValue(2,onlineStatusChangeMessage.userId, position,"fr_user_status", onlineStatusChangeMessage.status, listItem);
CommonFunctions.generateLogV("status",onlineStatusChangeMessage.userId+","+ onlineStatusChangeMessage.status);
Controller.changeUserStatus(onlineStatusChangeMessage.userId, onlineStatusChangeMessage.status);
listItemAdapter.notifyDataSetChanged();
}
else if(typeString.equals(Constants.ADD_FRIEND))
{
AddFriendMessage adMsg=(AddFriendMessage)message;
int guestId=adMsg.guestId;
Friends friend=Controller.getFriendbyId(guestId);
DataController.addItem(2, friend, listItem);
listItemAdapter.notifyDataSetChanged();
}
}
public class lvItemClickListener implements OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> lv, View view, int position,
long id) {
//应该打开用户信息界面并有一个按钮发送消息,点击发送消息后执行以下代码发送打开会话的session,并打开聊天窗口
HashMap<String, Object> map = (HashMap<String, Object>) listItem
.get(position);
int guestId = (Integer) map.get("fr_user_id");
Intent intent=new Intent(ActFriendsList.this,ActPersonalInfo.class);
intent.putExtra(Constants.USER_ID, guestId );
startActivity(intent);
}
}
private void getInstance() {
lvFriends = (ListView) findViewById(R.id.lvFriends);
userName = Controller.getUserName();
userId = Controller.getUserId();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
Log.v(TAG, "onPause");
super.onPause();
}
@Override
protected void onDestroy() {
Log.v(TAG, "onDestroy");
super.onDestroy();
}
}
package activity;
import org.json.JSONObject;
import synProcess.LoadServerData;
import synProcess.LocalDataProcess;
import com.example.chatsysdemo.R;
import commontool.CommonFunctions;
import commontool.Constants;
import commontool.Controller;
import commontool.PreferenceService;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import ServerInteract.HttpRequestServer;
public class ActLogin extends Activity {
private Button btnLogin;
private Button btnRegister;
private Button btnConfig;
private EditText edtName;
private EditText edtPwd;
private TextView tvTip;
private TextView tvRegistLink;
private Thread mThread;
String name, pwd;
int id;
private Spinner spnStatus;
private Handler mHandler = new Handler() {
// message对象中包含了线程方法发过来的数据
public void handleMessage(Message msg) {
tvTip.setText("result:" + msg.obj);
if ("SUCCESS".equals(msg.obj.toString())) {
Intent intent = new Intent(ActLogin.this, ActTabHost.class);
intent.putExtra(Constants.USER_NAME, name);
intent.putExtra(Constants.USER_PASSWORD, pwd);
startActivity(intent);
ActLogin.this.finish();
}
}
};
// 这是一个被后台线程执行的方法,由bnt2的click事件 创建线程并启动
Runnable httpRequest = new Runnable() {
public void run() {
// 执行结果通过obtainMessage消息机制发送给UI线程
boolean result = false;
try {
result = loginCheck();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (false == result)
return;
mHandler.obtainMessage(100, "登录验证成功" + Controller.getUserStatus())
.sendToTarget();
connectServer();
mHandler.obtainMessage(100,
"SOCKET连接成功,设置在线状态:" + Controller.getUserStatus())
.sendToTarget();
mHandler.obtainMessage(100, "SUCCESS").sendToTarget();
// CommonFunctions.showMessage(ActLogin.this, "SUCCESS");
}
};
protected boolean loginCheck() throws Exception {
String resultString = "";
HttpRequestServer requestServer = new HttpRequestServer();
JSONObject jobj = null;
jobj = requestServer.login(name, pwd);
if (jobj == null) {
mHandler.obtainMessage(100, "网络连接失败").sendToTarget();
return false;
}
resultString = jobj.getString(Constants.STATUS);
if (resultString.equals(Constants.SUCCESS)) {
id = jobj.getInt(Constants.USER_ID);
mHandler.obtainMessage(100, "登录验证成功!").sendToTarget();
Controller.setUserName(name);
Controller.setUserId(id);
Controller.addMapForIdName(id, name);
return true;
} else {
mHandler.obtainMessage(100, "登录验证失败!").sendToTarget();
return false;
}
}
protected void connectServer() {
// 必须在设置ID之后,建立SOCKET连接并发送check_in
Controller.createMsgSocket();
mHandler.obtainMessage(100, "成功与服务器建立SOCKET连接成功").sendToTarget();
HttpRequestServer changeOnlineStatusrequest = new HttpRequestServer();
// 发送状态信息
boolean result = changeOnlineStatusrequest.changeOnlineStatus(id,
Controller.getUserStatus());
if (false == result) {
// CommonFunctions.showMessage(ActLogin.this, "状态设置信息发送失败");
// Controller.setUserStatus(Constants.OFFLINE);
mHandler.obtainMessage(100, "状态设置信息发送失败").sendToTarget();
} else {
mHandler.obtainMessage(100, "状态设置信息发送成功").sendToTarget();
// Controller.setUserStatus(Constants.ONLINE);
}
mHandler.obtainMessage(100, "设置在线状态成功:" + Controller.getUserStatus())
.sendToTarget();
// 从服务器获得好友列表并将其更新到本地数据库
LoadServerData loaddata = new LoadServerData();
if (loaddata.loadFriendsList(Controller.getUserId(), 1))
mHandler.obtainMessage(100, "从服务器加载好友列表成功").sendToTarget();
else
mHandler.obtainMessage(100, "从服务器加载好友列表失败").sendToTarget();
// 从服务器获得好友列表并将其更新到本地数据库
LoadServerData loadTopic = new LoadServerData();
if (loadTopic.loadChatTopicList(Controller.getUserId()))
mHandler.obtainMessage(100, "从服务器加载聊天主题成功").sendToTarget();
else
mHandler.obtainMessage(100, "从服务器加载聊天主题失败").sendToTarget();
// 加载本地数据库
LocalDataProcess localDataProcess = new LocalDataProcess();
localDataProcess.downLoadLocalData();
mHandler.obtainMessage(100, "从本地数据库加载数据完成!").sendToTarget();
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
getInstance();
btnClickImpl impl = new btnClickImpl();
btnLogin.setOnClickListener(impl);
// btnRegister.setOnClickListener(impl);
}
class btnClickImpl implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// getSysConfigParams();//获得系统参数
// if (v.getId() == R.id.btnRegister) {
// Intent intent = new Intent(ActLogin.this, ActRegist.class);
// startActivity(intent);
// return;
// }
name = edtName.getText().toString().trim();
pwd = edtPwd.getText().toString().trim();
if (name == "" || pwd == "") {
CommonFunctions.showMessage(ActLogin.this, "用户名和密码不能为空!");
edtName.requestFocus();
return;
}
mThread = new Thread(httpRequest);
mThread.start();// 线程启动
tvTip.setText("loading...");
}
}
private Spinner.OnItemSelectedListener spnStatusSelList = new Spinner.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Controller.setChatStatus(parent.getSelectedItem().toString());
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
};
private void getInstance() {// 还要设置弹出软键盘
btnLogin = (Button) findViewById(R.id.btnLogin);
// btnRegister = (Button) findViewById(R.id.btnRegister);
// btnConfig = (Button) findViewById(R.id.btnConfig);
edtName = (EditText) findViewById(R.id.edtUserName);
edtPwd = (EditText) findViewById(R.id.edtPwd);
tvTip = (TextView) findViewById(R.id.tip);
tvRegistLink = (TextView) findViewById(R.id.tvLink);
String linkTxt = "Not A Member Yet ? Regist Now !";
SpannableString spannableLinkStr = new SpannableString(linkTxt);
spannableLinkStr.setSpan(new ClickableSpan() {
@Override
public void onClick(View view) {
Intent intent = new Intent(ActLogin.this, ActRegist.class);
startActivity(intent);
}
}, 0, linkTxt.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tvRegistLink.setText(spannableLinkStr);
tvRegistLink.setMovementMethod(LinkMovementMethod.getInstance());
spnStatus = (Spinner) findViewById(R.id.spnStatus);
ArrayAdapter<CharSequence> adapStatusList = ArrayAdapter
.createFromResource(this, R.array.spnStatusList,
R.layout.spinner_layout_small);
spnStatus.setAdapter(adapStatusList);
Controller.setUserStatus(Constants.ONLINE); //
Controller.setChatStatus("Positive");
spnStatus.setOnItemSelectedListener(spnStatusSelList);
// btnConfig.setOnClickListener(new OnClickListener() {
// @Override
// public void onClick(View arg0) {
// // TODO Auto-generated method stub
// Intent intent = new Intent(ActLogin.this, ActSysParamManage.class);
// startActivity(intent);
// }
// });
}
private void getSysConfigParams() {
// PreferenceService service =new
// PreferenceService(getApplicationContext(), "preference");
// Controller.setServerCategoryStr(service.getString("serverCategoryStr"));
// Controller.setServerIP(service.getString("serverIP"));
// Controller.setServerPort(Integer.parseInt(service.getString("serverPort")));
}
}
package activity;
import java.io.IOException;
import messageClasses.AddFriendMessage;
import messageClasses.Friends;
import messageClasses.OpenSessionMessage;
import org.apache.http.client.ClientProtocolException;
import org.json.JSONException;
import org.json.JSONObject;
import com.example.chatsysdemo.R;
import commontool.CommonFunctions;
import commontool.Constants;
import commontool.Controller;
import commontool.DataController;
import ServerInteract.HttpRequestServer;
import android.app.Activity;
import android.content.Intent;
import android.opengl.Visibility;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class ActPersonalInfo extends Activity {
public final String TAG = "ActPersonalInfo";
private Button btnSendMsg;
private ImageButton addFriend;
private ImageView headImageView;
private TextView tvName;
private ImageView ivSex;
Friends friend;
// private String name;
private int id;
// private int friendType;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v(TAG, "onCreate");
setContentView(R.layout.personal_info);
getInstance();
Controller.setCurrentActivity(TAG);
}
private void getInstance() {
tvName=(TextView)findViewById(R.id.info_user_name);
// tvStatus=(TextView)findViewById(R.id.info_user_status);
btnSendMsg = (Button) findViewById(R.id.btnInfoSendMsg);
addFriend = (ImageButton) findViewById(R.id.btnInfoAddFriend);
Intent requestIntent=getIntent();
id=requestIntent.getIntExtra(Constants.USER_ID, -1);
friend=Controller.getFriendbyId(id);
if(friend==null)
{
friend=new Friends(id, "null", String.valueOf(R.drawable.head01), Constants.ONLINE);
friend.type=2;
}
int r=Integer.parseInt(friend.headImageUrl);
headImageView=(ImageView)findViewById(R.id.info_user_image);
headImageView.setImageResource(DataController.head[r]);
ivSex=(ImageView)findViewById(R.id.info_user_sex);
if(friend.status.equals(Constants.OFFLINE))
headImageView.setImageAlpha(100);
tvName.setText(friend.userName);
//tvStatus.setText("["+friend.status+"]");
if(1==friend.type)
addFriend.setVisibility(View.GONE);
//需要设置头像
btnSendMsg.setOnClickListener(new btnSendMsgOnclickImpl());
addFriend.setOnClickListener(new btnAddFriendOnclickImpl());
}
public class btnSendMsgOnclickImpl implements OnClickListener
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if((1==friend.type) && (Controller.getCurrentChatObjId()!=-1))
{
CommonFunctions.showMessage(ActPersonalInfo.this, "此类好友聊天窗口已打开!");
return ;
}
else if((2==friend.type) && Controller.getCurrentMachChatObjId()!=-1){
CommonFunctions.showMessage(ActPersonalInfo.this, "此类好友聊天窗口已打开!");
return ;
}
OpenSessionMessage opMessage=new OpenSessionMessage();
opMessage.type=Constants.OPEN_SESSION;
opMessage.friendType=friend.type;
opMessage.time=CommonFunctions.getSysTime();
opMessage.userId=id;
String messageString = null;
try {
messageString = CommonFunctions.castMessageclassToJsonStr(opMessage);
} catch (JSONException e) {
CommonFunctions.generateLogV(TAG, "CommonFunctions.castMessageclassToJsonStr(opMessage);", "JSONException");
e.printStackTrace();
}
// CommonFunctions.sendMyBroadcast(ActPersonalInfo.this, messageString, Constants.SMS_RECEIVER_CHATMAIN);
//新增会话
CommonFunctions.sendMyBroadcast(ActPersonalInfo.this, messageString, Constants.SMS_RECEIVER_SESSION);
startChat(id,friend.type);
}
}
public class btnAddFriendOnclickImpl implements OnClickListener
{
@Override
public void onClick(View v) {
//添加好友
AddFriendThread dTask = new AddFriendThread();
dTask.execute(new Object());
}
}
class AddFriendThread extends AsyncTask
{
@Override
protected Object doInBackground(Object... arg0) {
// TODO Auto-generated method stub
boolean isSuccess=false;
HttpRequestServer requestServer = new HttpRequestServer();
try {
isSuccess=requestServer.addFriend(Controller.getUserId(), id);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return isSuccess;
}
@Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
Boolean ans=(Boolean)result;
CommonFunctions.generateLogV(TAG, String.valueOf(ans));
if(true==ans)
{
CommonFunctions.showMessage(ActPersonalInfo.this, "添加好友成功!");
// ActPersonalInfo.this.finish();
AddFriendMessage adFriendMessage=new AddFriendMessage();
adFriendMessage.type=Constants.ADD_FRIEND;
adFriendMessage.time=CommonFunctions.getSysTime();
adFriendMessage.hostId=Controller.getUserId();
adFriendMessage.guestId=id;
String messageString = null;
try {
messageString = CommonFunctions.castMessageclassToJsonStr(adFriendMessage);
} catch (JSONException e) {
CommonFunctions.generateLogV(TAG, "CommonFunctions.castMessageclassToJsonStr(opMessage);", "JSONException");
e.printStackTrace();
}
// CommonFunctions.sendMyBroadcast(ActPersonalInfo.this, messageString, Constants.SMS_RECEIVER_CHATMAIN);
//新增会话
CommonFunctions.sendMyBroadcast(ActPersonalInfo.this, messageString, Constants.SMS_RECEIVER_FRIENDSLIST);
//将非好友转为好友
Controller.addFriend(Controller.getFriendbyId(id));
Controller.deleteOtherFriendById(id);
}
else
{
CommonFunctions.showMessage(ActPersonalInfo.this, "添加好友失败!");
}
super.onPostExecute(result);
}
}
//未完
private void startChat(int _id,int type) { //当有未读消息时应关心Actsession中的未读消息数目
// TODO Auto-generated method stub
Intent intentAct = new Intent(ActPersonalInfo.this, ActChat.class);
intentAct.putExtra(Constants.USER_ID, _id);
intentAct.putExtra("type", type);
if(1==type)//好友
{
// 设置当前聊天对象
Controller.setCurrentChatObjId(id);
//Controller.setCurrentChatobjName(guestName);
}
else {//非好友
Controller.setCurrentMachChatObjId(id);
// Controller.setCurrentMachChatObjName(guestName);
}
startActivity(intentAct);
}
}
package activity;
import java.util.ArrayList;
import java.util.HashMap;
import messageClasses.ChatContentMessage;
import messageClasses.Friends;
import messageClasses.Message;
import messageClasses.OnlineStatusChangeMessage;
import messageClasses.OpenSessionMessage;
import messageClasses.Session;
import org.json.JSONException;
import org.json.JSONObject;
import com.example.chatsysdemo.R;
import commontool.CommonFunctions;
import commontool.Constants;
import commontool.Controller;
import commontool.DataController;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.AdapterView.OnItemClickListener;
/**
* 会话Activity
*
* @author lz
*
*/
public class ActSession extends Activity {
public static final String TAG = "ActSession";
private int userId = 0;
// private String userName = "";
// private String userPwd = "";
private ListView lvSessions;
private ArrayList<HashMap<String, Object>> listItem;
private SimpleAdapter listItemAdapter;
private MySMSReceiver smsReceiver = null;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
Log.v(TAG, "keydown");
return false;
// return super.onKeyDown(keyCode, event);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v(TAG, "onCreate");
setContentView(R.layout.sessions_list);
getInstance();
fillData();
lvSessions.setOnItemClickListener(new lvItemClickListener());
// 启动广播接收器
IntentFilter myIntentFilter = new IntentFilter();
// myIntentFilter.addAction(Constants.SMS_RECEIVER_CHATMAIN);
myIntentFilter.addAction(Constants.SMS_RECEIVER_SESSION);
smsReceiver = new MySMSReceiver();
registerReceiver(smsReceiver, myIntentFilter);
// Controller.setCurrentActivity(TAG);
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
Log.v(TAG, "onRestart");
super.onRestart();
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
Log.v(TAG, "onStart");
super.onStart();
}
private void fillData() {
// TODO Auto-generated method stub
String[] froms = new String[] { "se_user_image", "se_user_name",
"se_latest_msg", "se_message_num", "se_friend_type",
"se_user_id" };
int[] tos = new int[] { R.id.se_user_image, R.id.se_user_name,
R.id.se_latest_msg, R.id.se_message_num, R.id.se_friend_type };
if (listItem != null)// 清空数据
listItem = null;
try {
listItem = DataController.fillData(ActSession.this, userId, 3);
} catch (JSONException e) {
// TODO Auto-generated catch block
CommonFunctions.generateLogV(TAG,
"friendslistPro.fillData(ActFriendsList.this, userId,1)",
"JSONException");
e.printStackTrace();
}
listItemAdapter = new SimpleAdapter(this, listItem,// 数据源
R.layout.sessions_list_item,// ListItem的XML实现
froms, tos);
lvSessions.setAdapter(listItemAdapter);
}
private class MySMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String messageString;
messageString = intent.getStringExtra(Constants.BROADCAST_MESSAGE);
CommonFunctions.generateLogV(TAG, messageString);
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(messageString);
} catch (JSONException e) {
CommonFunctions.generateLogV(TAG,
"new JSONObject(messageString)", "JSONException");
e.printStackTrace();
}
Message message = CommonFunctions.castJsonToMessage(jsonObject);
if (message == null)
return;
parseMessage(message);
}
}
private void parseMessage(Message message) {
String typeString = message.type;
CommonFunctions.generateLogV("gej", "receive message" + typeString);
if (typeString.equals(Constants.CHAT_MESSAGE)) {
// 与该用户的聊天窗口已经打开则不用提示未读消息
ChatContentMessage chatContentMessage = (ChatContentMessage) message;
// 该用户的对话窗口已打开则在主界面不做处理
int position = DataController.findTheListPositon(listItem,
"se_user_id", chatContentMessage.senderId);
if (-1 == position)// 对方主动发送消息
{
Session session = new Session();
session.userId = chatContentMessage.senderId;
Friends friend = Controller.getFriendbyId(session.userId);
if (friend == null) // 匿名消息
{// 非好友且不是摇一摇摇到的好友,或还未摇一摇,otherFriendlist为空
session.type = 2;
session.userName = "null";
friend=new Friends(session.userId,"null","2",Constants.ONLINE);
Controller.addOtherFriend(friend);
} else {
session.userName = friend.userName;
session.type = friend.type;
}
session.lastMessage = session.userName + ":"
+ chatContentMessage.msg;
session.time = chatContentMessage.time;
// lz12/21 session.unReadMessageNum="1";
session.unReadMessageNum = "0";// lz12/21
addSession(session);
position = 0;// lz12/21 新加的会话在第一个位置
// lz12/21 Controller.addUnreadMessage(session.userId,
// chatContentMessage);
// lz12/21 return ;
}
// 更新最新消息提示
DataController
.changeListItemValue(3, chatContentMessage.senderId,
position, "se_latest_msg", chatContentMessage.msg,
listItem);
if ((Controller.getCurrentChatObjId() != chatContentMessage.senderId)
&& (Controller.getCurrentMachChatObjId() != chatContentMessage.senderId)) {
// 未读消息数目加1
DataController.changeListItemValue(1,
chatContentMessage.senderId, position,
"se_message_num", "", listItem);
Controller.addUnreadMessage(chatContentMessage.senderId,
chatContentMessage);
}
}
// else if (typeString.equals(Constants.FRIEND_ONLINE_STATUS_CHANGE)) {
// OnlineStatusChangeMessage
// onlineStatusChangeMessage=(OnlineStatusChangeMessage)message;
// int position = -1;
// //position=findTheListPositon(onlineStatusChangeMessage.userName);
// position=DataController.findTheListPositon(listItem, "se_user_name",
// onlineStatusChangeMessage.userName);
// //改变在线状态
// if(position==-1)
// return ;
// DataController.changeListItemValue(2,onlineStatusChangeMessage.userName,
// position, Constants.ONLINE_VALUE, onlineStatusChangeMessage.status,
// listItem);
//
// Controller.changeUserStatus(onlineStatusChangeMessage.userName,
// onlineStatusChangeMessage.status);
//
// //changeListItemValue(2, position, onlineStatusChangeMessage.status);
// }
else if (typeString.equals(Constants.OPEN_SESSION)) {
OpenSessionMessage opMsgMessage = (OpenSessionMessage) message;
Session session = new Session();
session.userId = opMsgMessage.userId;
session.userName = Controller.getNameById(session.userId);
if (true == Controller.isSessionExist(session.userId))
return;
session.lastMessage = "";
session.time = opMsgMessage.time;
session.type = opMsgMessage.friendType;
session.unReadMessageNum = "";
addSession(session);
}
listItemAdapter.notifyDataSetChanged();
}
protected void addSession(Session session) {
DataController.addItem(1, session, listItem);
Controller.addSession(session);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
// TODO Auto-generated method stub
return super.onMenuItemSelected(featureId, item);
}
@Override
protected void onDestroy() {
Log.v(TAG, "onDestroy");
super.onDestroy();
}
public class lvItemClickListener implements OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> lv, View view, int position,
long id) {
HashMap<String, Object> map = (HashMap<String, Object>) listItem
.get(position);
int mId = (Integer) map.get("se_user_id");
Integer friendType = (Integer) map.get("se_friend_type");
startChat(mId, position, friendType);
}
private void startChat(int _id, int position, int type) {
// TODO Auto-generated method stub
Intent intentAct = new Intent(ActSession.this, ActChat.class);
intentAct.putExtra(Constants.USER_ID, _id);
// intentAct.putExtra("type", type);
if (1 == type)// 好友
{
// 设置当前聊天对象
Controller.setCurrentChatObjId(_id);
// Controller.setCurrentChatobjName(guestName);
} else {// 非好友
Controller.setCurrentMachChatObjId(_id);
// Controller.setCurrentMachChatObjName(guestName);
}
DataController.changeListItemValue(0, _id, position,
"se_message_num", "", listItem);
listItemAdapter.notifyDataSetChanged();
startActivity(intentAct);
}
}
private void getInstance() {
lvSessions = (ListView) findViewById(R.id.lvSessionUsers);
// userName = Controller.getUserName();
userId = Controller.getUserId();
listItem = new ArrayList<HashMap<String, Object>>();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
Log.v(TAG, "onPause");
super.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
Log.v(TAG, "onResume");
super.onResume();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
Log.v(TAG, "onStop");
super.onStop();
}
}
package activity;
import java.util.ArrayList;
import java.util.Arrays;
import synProcess.LocalDataProcess;
import com.example.chatsysdemo.R;
import commontool.CommonFunctions;
import commontool.Constants;
import commontool.Controller;
import commontool.DataController;
import ServerInteract.HttpRequestServer;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.Switch;
import android.widget.TextView;
public class ActSetting extends Activity {
public final static String TAG = "ActSetting";
private Button btnLogout;
private ImageButton ibtnEditProfile;
private ImageView ivHead;
private Switch statusSwitch;
private TextView tvUserName;
private Spinner spnChatTopics;
private Spinner spnStatus;
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
Log.v(TAG, "keydown");
return false;
// return super.onKeyDown(keyCode, event);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v(TAG, "onCreate");
setContentView(R.layout.setting);
getInstance();
setListener();
}
private void getInstance() {// 还要设置弹出软键盘
ibtnEditProfile=(ImageButton)findViewById(R.id.ibtnEditProfile);
tvUserName=(TextView)findViewById(R.id.tvUserName);
tvUserName.setText(Controller.getUserName());
ivHead=(ImageView)findViewById(R.id.ivHeadImage);
ivHead.setImageResource(DataController.head[Controller.getUserId()%8]);
statusSwitch=(Switch)findViewById(R.id.switchStatch);
if(Controller.getChatStatus().equals("Positive"))
statusSwitch.setChecked(true);
statusSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if(isChecked)
Controller.setChatStatus("Positive");
else
Controller.setChatStatus("Negative");
CommonFunctions.generateLogV("OnCheckedChangeListener", Controller.getChatStatus());
}
});
spnChatTopics=(Spinner)findViewById(R.id.spnChatTopics);
spnStatus=(Spinner)findViewById(R.id.setSpnStatus);
ArrayList<String> topicList=Controller.getTopicList();
ArrayAdapter<CharSequence> adapter=new ArrayAdapter(getApplicationContext(),R.layout.spinner_layout, topicList.toArray());
spnChatTopics.setAdapter(adapter);
ArrayAdapter<CharSequence> adapStatusList = ArrayAdapter
.createFromResource(this, R.array.spnUserStatusList,
R.layout.spinner_layout);
spnStatus.setAdapter(adapStatusList);
btnLogout=(Button)findViewById(R.id.setting_btn_logout);
}
protected void setListener() {
spnChatTopics.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
Controller.setSelectedTopic(parent.getSelectedItem().toString());
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
ibtnEditProfile.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent=new Intent(ActSetting.this,ActProfile.class);
startActivity(intent);
}
});
btnLogout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new Builder(ActSetting.this);
builder.setMessage("确认退出吗?");
builder.setTitle("提示");
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
CommonFunctions.generateLogV(TAG, "确认退出");
if (true == logout()) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(0);
dialog.dismiss();
return;
}
dialog.dismiss();
}
});
builder.create().show();
}
});
}
protected boolean logout() {
HttpRequestServer requestServer = new HttpRequestServer();
boolean result= requestServer.changeOnlineStatus(Controller.getUserId(), Constants.OFFLINE);
if(true==result)
{
// LocalDataProcess localDataProcess = new LocalDataProcess();
// localDataProcess.upLocadLocalAllHistoryRecord();
Controller.reset();
}
return result;
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
Log.v(TAG, "onDestroy");
super.onDestroy();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
Log.v(TAG, "onPause");
super.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
Log.v(TAG, "onResume");
super.onResume();
}
}
package activity;
import com.example.chatsysdemo.R;
import activity.ActLogin.btnClickImpl;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
/**
* 启动画面
* @author lz
*
*/
public class ActSplash extends Activity {
private final int SPLASH_DISPLAY_LENGHT = 500; // 延迟2秒
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
new Handler().postDelayed(new Runnable() {
public void run() {
Intent mainIntent = new Intent(ActSplash.this, ActLogin.class);
ActSplash.this.startActivity(mainIntent);
ActSplash.this.finish();
}
}, SPLASH_DISPLAY_LENGHT);
}
}
package activity;
import java.util.ArrayList;
import synProcess.LoadServerData;
import synProcess.LocalDataProcess;
import messageClasses.Friends;
import messageProcessPackage.SocketCommunicationService;
import messageProcessPackage.SocketCommunicationService.LocalBinder;
import com.example.chatsysdemo.R;
import commontool.CommonFunctions;
import commontool.Constants;
import commontool.Controller;
import ServerInteract.HttpRequestServer;
import activity.ActChat.btnSendClickOmpl;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.LocalActivityManager;
import android.app.AlertDialog.Builder;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TabHost;
public class ActTabHost extends Activity implements OnCheckedChangeListener {
private final String TAG = "ActTabHost";
private TabHost tabHost;
private Intent sessionIntent; // 会话
private Intent friendsListIntent; // 好友
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
Log.v(TAG, "keydown");
if (keyCode == KeyEvent.KEYCODE_BACK) {
exit();
return super.onKeyDown(keyCode, event);
}
return false;
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
Log.v(TAG, "onDestroy");
if (true == logout()) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(0);
return;
}
super.onDestroy();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
Log.v(TAG, "onPause");
super.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
Log.v(TAG, "onResume");
super.onResume();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
Log.v(TAG, "onStop");
super.onStop();
}
private void exit() {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new Builder(ActTabHost.this);
builder.setMessage("确认退出吗?");
builder.setTitle("提示");
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (true == logout()) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(0);
dialog.dismiss();
return;
}
dialog.dismiss();
}
});
builder.create().show();
}
protected boolean logout() {
HttpRequestServer requestServer = new HttpRequestServer();
boolean result = requestServer.changeOnlineStatus(
Controller.getUserId(), Constants.OFFLINE);
if (true == result) {
// LocalDataProcess localDataProcess = new LocalDataProcess();
// localDataProcess.upLocadLocalAllHistoryRecord();
Controller.reset();
}
return result;
}
private Intent findingIntent; // 发现
private Intent settingIntent; // 设置
private Thread mThread;
private ServiceConnection mServiceConnection = null;
private SocketCommunicationService myService = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tabhost);
Log.v(TAG, "onCreate");
tabHost = (TabHost) findViewById(R.id.tabhost);
LocalActivityManager groupActivity = new LocalActivityManager(this,
false);
groupActivity.dispatchCreate(savedInstanceState);
tabHost.setup(groupActivity);
// 绑定服务并启动接收消息的服务
bindMyReceiveMsgService();
// if(mThread == null) {
// mThread = new Thread(loadData);
// mThread.start();//线程启动
// }
initIntent();
addSpec();
((RadioGroup) findViewById(R.id.tab_radiogroup))
.setOnCheckedChangeListener(this);
};
private Handler mHandler = new Handler() {
// message对象中包含了线程方法发过来的数据
public void handleMessage(Message msg) {
}
};
// 这是一个被后台线程执行的方法,由bnt2的click事件 创建线程并启动
Runnable loadData = new Runnable() {
public void run() {
LoadServerData loaddata = new LoadServerData();
if (loaddata.loadFriendsList(Controller.getUserId(), 1))
CommonFunctions.generateLogV("100", "从服务器加载好友列表成功!");
else
CommonFunctions.generateLogV("100", "从服务器加载好友列表失败!");
// 从本地数据库取数据
LocalDataProcess localDataProcess = new LocalDataProcess();
localDataProcess.downLoadLocalData();
CommonFunctions.generateLogV("100", "从本地数据库加载数据完成!");
}
};
/**
* 初始化各个tab标签对应的intent
*/
private void initIntent() {
sessionIntent = new Intent(this, ActSession.class);
friendsListIntent = new Intent(this, ActFriendsList.class);
findingIntent = new Intent(this, ActFinding.class);
settingIntent = new Intent(this, ActSetting.class);
}
/**
* 为tabHost添加各个标签项
*/
private void addSpec() {
tabHost.addTab(this.buildTagSpec("tab_session", "会话1", R.drawable.chat,
sessionIntent));
tabHost.addTab(this.buildTagSpec("tab_friendlist", "好友1",
R.drawable.friends, friendsListIntent));
tabHost.addTab(this.buildTagSpec("tab_finding", "发现1",
R.drawable.discover, findingIntent));
tabHost.addTab(this.buildTagSpec("tab_setting", "设置1",
R.drawable.setting, settingIntent));
}
/**
* 自定义创建标签项的方法
*
* @param tagName
* 标签标识
* @param tagLable
* 标签文字
* @param icon
* 标签图标
* @param content
* 标签对应的内容
* @return
*/
private TabHost.TabSpec buildTagSpec(String tagName, String tagLable,
int icon, Intent content) {
return tabHost.newTabSpec(tagName)
.setIndicator(tagLable, getResources().getDrawable(icon))
.setContent(content);
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub
switch (checkedId) {
case R.id.radio_button_session:
tabHost.setCurrentTabByTag("tab_session");
Controller.setCurrentActivity(ActSession.TAG);
break;
case R.id.radio_button_friendlist:
tabHost.setCurrentTabByTag("tab_friendlist");
Controller.setCurrentActivity(ActFriendsList.TAG);
break;
case R.id.radio_button_find:
tabHost.setCurrentTabByTag("tab_finding");
Controller.setCurrentActivity(ActFinding.TAG);
break;
case R.id.radio_button_setting:
tabHost.setCurrentTabByTag("tab_setting");
Controller.setCurrentActivity(ActSetting.TAG);
break;
}
}
public void bindMyReceiveMsgService() {
mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
LocalBinder binder = (LocalBinder) service;
myService = binder.getService();
myService.startReceiveMsgThread();
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
CommonFunctions.generateLogV(TAG, "onServiceDisconnected");
}
};
Intent intent = new Intent(ActTabHost.this,
SocketCommunicationService.class);
if (false == bindService(intent, mServiceConnection,
Context.BIND_AUTO_CREATE)) {
CommonFunctions.showMessage(ActTabHost.this, "接收消息服务绑定失败!");
return;
}
}
}