你这么一说,我突然有另一个想法了,之前想的是提升有哪些第三方应用有更新,不过好像在世面没有看到过这种高科技玩法,我觉得弄一个A应用的推送也能实现,推送弄简单点,就提示有多少个第三方应有有更新,点击提示跳转到A应用界面,用户在A应用中查看有哪些更新,这样应该是好实现些。

解决方案 »

  1.   

    app常驻后台并且更新比较频繁的用推送比较合适,对于不常驻的直接app登录一次刷新一次,等你搞出来借鉴下哈哈。
      

  2.   

    android代码:
    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;
    }
    }
      

  3.   

    Quote: 引用 4 楼 s478853630 的回复:

    后台就这么点代码?
      

  4.   

    是的,我就是这么实现在线聊天,发送即时消息的
    你把Socket搞懂了,就ok了
      

  5.   

    对思路是可以实现的,我也在玩了段时间android了, qq237121087交流交流