我
我們開發了壹個應用程序,這裏稱為App A,類似於appStore。App A裏有很多第三方應用,可以查看和下載第三方應用。現在的任務是如果這些第壹
第三方應用有了新版本,要及時在手機上推送消息,提示哪些第三方應用更新了。註意,這不是推。我們的A應用已更新。
我以前沒做過
我googled了壹下這個作品,發現有壹些開源廠商寫的免費推送服務,比如極光推送/和百度雲推送/cloud/push。粗略看了壹下,可能了解不夠,感覺他們只能推送單個應用相關的應用信息。
另外我還看到了壹些其他的,比如MQTT,ANDROID PN,沒有仔細研究過。作為壹個工作壹年的菜鳥,感覺很迷茫。如果妳有什麽建議,請告訴我。,具體解決方案如下:
溶液1:
如果啟動程序,請檢查第三方應用程序是否是最新版本。如果沒有,會提示妳拉。
解決方案2:
引用1樓QQ 237121087的回復:如果需要啟動程序,檢查第三方應用是否為最新版本,如果不是,會提示拉。
妳們
說到這裏,我突然又有了壹個想法。我想過升級哪些第三方應用更新了,但好像世界上沒見過這麽高科技的玩法。我覺得可以通過推壹個A應用來實現。
按簡化按鈕,提示有多少第三方應該有更新。點擊提示跳轉到A應用界面,用戶可以查看A應用有哪些更新,應該更容易實現。
解決方案3:
當app常駐後臺,更新頻繁時,用push比較合適。對於不常駐的直接app登錄,刷新壹次,等妳來借鑒。
解決方案4:
Android代碼:
包com . Tao caiku . Gaea . service . socket;
導入Java . net . server socket;
導入Java . net . socket;
導入org.apache..Tao caiku . Gaea . common . tckapp;
導入com . Tao caiku . Gaea . domain . context . container;
導入com . Tao caiku . Gaea . service . settings service;
導入com . Tao caiku . Gaea . util . fileutil;
導入Android . annotation . suppress lint;
導入Android . OS . bundle;
導入Android . OS . message;
導入Android . util . log;
/**
*線程運行套接字通信
* @作者TCK-001
* @版本1.0
*/
@SuppressLint("HandlerLeak ")
公共最終類SocketThread擴展線程{
公共無效運行(){
嘗試{
while (true) {
如果(!SocketManager.get()。isStart()) {
返回;
}
server socket sever = socket manager . get()。get socket();
if(null = = sever | | sever . is closed()){
返回;
}
新的ReadSocket(sever.accept())。start();
}
} catch(異常e) {
Log.e("抽象活動","套接字已被回收");
}
}
/**
*讀取套接字並解析它。
* @作者TCK-001
* @版本1.0
*/
公共類ReadSocket擴展線程{
私用插座插座;
公共讀取套接字(套接字套接字){
this.socket = socket
}
公共無效運行(){
嘗試{
String jsonStr = FileUtil.get()。readFile(socket.getInputStream(),HTTP。UTF_8,1,假);
socket . close();
JSON object JSON = new JSON object(JSON str);
if(JSON . getlong(" memberId ")= = container . member . getid()& amp;& ampcontainer . socket key . equals(JSON . getstring(" socket key "))
& amp& ampSettingService.get()。get setting(settings service。RECEIVE_MSG)) {
Bundle Bundle = new Bundle();
bundle.putInt("type ",JSON . getint(" type "));
bundle.putString("data ",json.getJSONObject("data ")。toString());
Message = new Message();
message . setdata(bundle);
TckApp.get()。getLastAct(null). socket handler . sendmessage(message);
}
} catch(異常e) {
Log.e("AbstractActivity ","接收Socket消息並解析json ",e);
}
}
}
}
服務器java代碼:
/**
*發送套接字通信消息
* @param vo
* @返回
*/
公共靜態布爾發送套接字(SocketVo vo) {
嘗試{
如果(!pingServer(vo.getIp(),2000)){返回false}
Socket Socket = new Socket(VO . getip()、VO . getport());//創建壹個套接字對象,並指定服務器端地址和端口號。
output stream output = socket . get output stream();
writer writer = new output streamwriter(output,CharEncoding。UTF _ 8);
PrintWriter out = new PrintWriter(writer,true);//獲取客戶端的輸出流。
vo.setIp(空);VO . setport(0);
out . print(gsonutils . tojson(VO));//填寫信息
writer . flush();writer . close();
out . flush();out . close();
output . flush();output . close();
socket . close();
返回true
} catch(異常e) {
Log.error("發送套接字失敗:"+e . getmessage());
返回false
}
}
/**
*妳能ping通IP地址嗎?
* @param服務器IP地址
* @param超時超時持續時間
* @return布爾值
*/
公共靜態布爾pingServer(字符串服務器,int超時){
嘗試{
process process = runtime . get runtime()。exec(" ping "+server+"-n 1-w "+time out);
if(null = = process){返回false}
string info = file util . readfile(process . getinputstream(),ENCODING_GBK,1,false);
return tool util . getstrcharnum(info," ms ")& gt;= 3;
} catch(異常e) {
返回false
}
}