你这么一说,我突然有另一个想法了,之前想的是提升有哪些第三方应用有更新,不过好像在世面没有看到过这种高科技玩法,我觉得弄一个A应用的推送也能实现,推送弄简单点,就提示有多少个第三方应有有更新,点击提示跳转到A应用界面,用户在A应用中查看有哪些更新,这样应该是好实现些。
解决方案 »
- android下的wifi调试,连接不上的bug.
- 【Android 游戏开发】-- 仿捕鱼达人
- android源码中的录音机问题
- 为什么 android 开发手机拨号器的时候另外一台手机接收不到
- android 通过webservice连接服务器 服务器端该如何搭建?
- Android VIRTUAL_HARD_KEY
- 求教大虾,手机android2.2下的flash应用开发,为何文本框无法输入中文?
- 没有搞android底层的吗,留个方式交流下。。。
- 问下如何实现android下java与c++的通信
- 单选框的问题
- 现在解析json数据一般用什么方式?
- android 杀掉进程出现清空掉/data/data下面的TXT文件里面的内容
package com.taocaiku.gaea.service.socket;import java.net.ServerSocket;
import java.net.Socket;
import org.apache.http.protocol.HTTP;
import org.json.JSONObject;
import com.taocaiku.gaea.common.TckApp;
import com.taocaiku.gaea.domain.context.Container;
import com.taocaiku.gaea.service.SettingService;
import com.taocaiku.gaea.util.FileUtil;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;/**
* 运行Socket通信的线程
* @author TCK-001
* @version 1.0
*/
@SuppressLint("HandlerLeak")
public final class SocketThread extends Thread { public void run() {
try {
while (true) {
if (!SocketManager.get().isStart()) {
return;
}
ServerSocket sever = SocketManager.get().getSocket();
if (null == sever || sever.isClosed()) {
return;
}
new ReadSocket(sever.accept()).start();
}
} catch (Exception e) {
Log.e("AbstractActivity", "Socket已经被回收");
}
}
/**
* 读取Socket并解析
* @author TCK-001
* @version 1.0
*/
public class ReadSocket extends Thread {
private Socket socket;
public ReadSocket(Socket socket) {
this.socket = socket;
}
public void run() {
try {
String jsonStr = FileUtil.get().readFile(socket.getInputStream(), HTTP.UTF_8, 1, false);
socket.close();
JSONObject json = new JSONObject(jsonStr);
if (json.getLong("memberId") == Container.member.getId() && Container.socketKey.equals(json.getString("socketKey"))
&& SettingService.get().getSetting(SettingService.RECEIVE_MSG)) {
Bundle bundle = new Bundle();
bundle.putInt("type", json.getInt("type"));
bundle.putString("data", json.getJSONObject("data").toString());
Message message = new Message();
message.setData(bundle);
TckApp.get().getLastAct(null).socketHandler.sendMessage(message);
}
} catch (Exception e) {
Log.e("AbstractActivity", "接收Socket消息,解析json", e);
}
}
}}
服务器java代码:
/**
* 发送一个Socket通信消息
* @param vo
* @return
*/
public static boolean sendSocket(SocketVo vo) {
try {
if (!pingServer(vo.getIp(), 2000)) {return false;}
Socket socket = new Socket(vo.getIp(), vo.getPort());// 创建socket对象,指定服务器端地址和端口号
OutputStream output = socket.getOutputStream();
Writer writer = new OutputStreamWriter(output, CharEncoding.UTF_8);
PrintWriter out = new PrintWriter(writer, true);// 获取 Client 端的输出流
vo.setIp(null);vo.setPort(0);
out.print(GsonUtils.toJson(vo));// 填充信息
writer.flush();writer.close();
out.flush();out.close();
output.flush();output.close();
socket.close();
return true;
} catch (Exception e) {
log.error("发送Socket失败:" + e.getMessage());
return false;
}
}
/**
* 能否ping通IP地址
* @param server IP地址
* @param timeout 超时时长
* @return boolean
*/
public static boolean pingServer(String server, int timeout) {
try {
Process process = Runtime.getRuntime().exec("ping " + server + " -n 1 -w " + timeout);
if (null == process) {return false;}
String info = FileUtil.readFile(process.getInputStream(), ENCODING_GBK, 1, false);
return ToolUtil.getStrCharNum(info, "ms") >= 3;
} catch (Exception e) {
return false;
}
}
你把Socket搞懂了,就ok了