2013年3月17日 星期日

android apps範例_httptest

緣起:
很久以前就有個想法,想要將自己的程式碼無料分享出來,
最近有去上過android apps開發的課,上過課後花了點時間利用課堂教的寫了第 3 個apps,
在Acer Iconia B1 A71上面測過是OK的,相關程式碼以及開發過程稍微整理一下就寫了這篇blog.
第3次寫blog, 第3次寫android apps, 若有不周,歡迎批評指教, 缺漏的部份日後會慢慢補上.
轉貼或引用本篇blog內文章段落&程式碼, 不必交代出處.

過程:
想要寫個android apps去某網站抓查詢的資料回來,不想用webview或是類似VB提供的web browser原件去寫的話, 可以用HttpPost類別來寫apps.

上過課後,開始選定目標, 這次以郵局官網上面的查詢全國郵局營業地點為範例,那個頁面內有提供很多種查詢方式,例如可用縣市行政區下去查, 也可以用該局電腦局號下去查,
每種查詢方式固定會給你填一兩個欄位, 現在就是要用程式去填這幾個欄位後傳給伺服器,
接著在畫面上秀出伺服器回傳給你的資料,

這整個過程的重點有兩個:
1.首先要找出回應查詢的網頁的網址:


2.第二個就是要找出有哪幾個是一定要送給伺服器來做查詢的欄位:


3.因為需要上網的功能, 所以在AndroidMainfest.xml內有加入INTERNET permission.
4.android 4.0以後,不允許main thread內有internet行為,所以改用thread寫法來更新view,
5.伺服器傳回的資料會轉成html格式秀在畫面上,因為沒對原始資料做篩選直接丟畫面,所以畫面會很亂, 真正想要秀的東西會藏在那一團東西裡頭.

所有程式碼下載連結(講解是用電腦局號查詢,程式碼是用縣市行政區查詢):
https://docs.google.com/file/d/0B6EVEd5P2B9cUlMwdFBOQmpUbFk/edit?usp=sharing

2013年3月14日 星期四

win7遠端協助

緣起:
有鑑於win7漸漸在一般公司行號普及, 若MIS人員想要遠端服務同仁的電腦方面的問題,可以參考這篇看看!若有不清楚的地方可留言發問,不周之處,日後會慢慢補完.轉貼或引用本篇blog內文章段落, 不必交代出處.

架構:
MIS人員的電腦OS: xp 或 win7皆可!
需要別人協助的同仁的電腦OS:win7 限定.
p.s.win7遠端協助的服務設定都有打開!

步驟:
1.事先寫好batch檔案(.bat)內容如下:
@echo off
 set /p empid=請輸入自己的員工編號:
 call msra /saveasfile \\xx.xx.xx.x\YYY\%empid%_RA 123456

2.當同仁遇到電腦的問題打電話求救時, 在電話中請這位同仁去公司內網點此batch超連結,
執行batch檔, 首先會要求同仁輸入自己的員工編號, 輸入完畢後按下enter,

3.MIS人員去\\xx.xx.xx.x\YYY\底下找看看是否有含該員工編號的RA檔案, 點兩下,
會跑出一個視窗詢問密碼, 密碼就是123456

4.打好密碼送出後, 再請同仁點選'YES' ,

5.接下來,MIS再打開的遠端協助的視窗上面找到'接管控制權',按下再請同仁點選YES, 即可掌控對方的電腦來操作使用.
p.s. msra就是win7遠端協助的dos command,
************************************************************************
02/01/2014更新:
特別補充: 被協助端電腦是win xp,協助端電腦是win7,若是winxp協助winxp則用傳統的指令conf(netmeeting)即可!

步驟(假設自己是資訊人員):
1.先用電話指示被協助端: 開始->執行->打"rcimlby.exe –LaunchRA",
2.此時會開啟一個遠端協助的視窗,在視窗內點選"邀請某人的協助",
3.利用email : 在email那欄位告知對方打入自己的email,然後點選"邀請此人",
4.下一個頁面,不打任何字,直接點選"繼續"也可以!
5.下一頁,兩個密碼的欄位都打123456,或是其他簡單一點的密碼都可以!然後點選"寄出邀請",
6.下一個視窗點選"允許",
7.自己去收信,會收到一封被協助端寄來的"你已收到來自被協助端的遠端協助邀請",
點選夾檔"RcBuddy.MsRcIncident",打入密碼123456,然後點選"是",
8.打好密碼送出後, 再請同仁點選'YES' , 接下來,MIS再打開的遠端協助的視窗上面找到'接管控制權',按下再請同仁點選YES, 即可掌控對方的電腦來操作使用.

簡單來說被協助端win7的遠端協助指令比較建全, 提供一堆參數, 可以弄成.bat檔,被協助端只要執行.bat就可以節省一連串手動的提出邀請的動作, 反觀被協助端若是win xp的遠端協助指令比較兩光, 沒有其他參數可打, 頂多只能靠指令叫出遠端協助的視窗, 要提出邀請只能乖乖的照以上步驟手動去做!
************************************************************************
08/22/2015更新:
特別補充:批次檔最新版會自動偵測被協助端電腦是win xp還是win7,無論是哪一種都會自動生成RA檔, win7的RA檔生成比較簡單,請看本篇最上方一開始介紹的,win xp的RA檔生成比較麻煩一點,但是輔助用java script鍵盤按鍵自動輸入也可以做到全自動化,MIS人員的電腦無論是win xp還是win7都可以打開此RA檔來建立遠端協助連線!

批次檔如下:
@if (@CodeSection == @Batch) @then

@echo off
ver | find "XP" > nul  
if %ERRORLEVEL% == 0 goto ver_xp  
 
goto warnthenexit  
 
:ver_xp  
:Run Windows XP specific commands here.  
set SendKeys=CScript //nologo //E:JScript "%~F0"
%SendKeys%
goto :EOF
 
:warnthenexit  
@echo off
set /p empid=請輸入自己的員工編號:
call msra /saveasfile \\xxx.xxx.xxx.xxx\%empid%_%time:~-4%RA 123456
 
goto :EOF
@end

// JScript section
var maxNum = 10;   //to get random number
var minNum = 1;   //to get random number
var n = Math.floor(Math.random()*(maxNum-minNum+1))+minNum; //to get random number
var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.Run("rcimlby -LaunchRA");
WScript.Sleep(3000);
WshShell.AppActivate("PCHShell Window");
WScript.Sleep(100);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(500);
WshShell.SendKeys("^(a)");
WScript.Sleep(500);
WshShell.SendKeys("^(c)");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("123456");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("123456");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(6000);
WshShell.SendKeys("\\\\");
WScript.Sleep(500);
WshShell.SendKeys("xxx.xxx.xxx.xxx");
WScript.Sleep(500);
WshShell.SendKeys("\\\0");
WScript.Sleep(500);
WshShell.SendKeys("^(v)");
WScript.Sleep(500);
WshShell.SendKeys("_"+n);
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(500);

2013年3月12日 星期二

android apps範例_Web Service Client

緣起:
很久以前就有個想法,想要將自己的程式碼無料分享出來,
最近有去上過android apps開發的課,上過課後花了點時間利用課堂教的寫了第二個apps,
在Acer Iconia B1 A71上面測過是OK的,相關程式碼以及開發過程稍微整理一下就寫了這篇blog.
第2次寫blog, 第2次寫android apps, 若有不周,歡迎批評指教, 缺漏的部份日後會慢慢補上.
除了ksoap2.jar檔案以外, 轉貼或引用本篇blog內文章段落&程式碼, 不必交代出處.

過程:
上過課後,開始survey google上面的資料,首先了解甚麼是Web Service, 再來是收集到某網站有架Web Service server, 可以取得WSDL(.xml file), 再來是survey android apps範例(大部分的例子都是server跟client一組的,縱使照他的去寫也無server可測試,架server可是要花時間的,況且也沒WSDL可參照,從他的android code也可猜出WSDL長啥樣子,反正android apps code有參考價值就是了), 再來是寫WS需要SOAP套件,網路上有免費的android SOAP套件(ksoap2),再來是決定架構, 到底是要仿照網路一些java範例(new一個WS proxy的物件開始寫),還是要照現成別人的android apps架構, 當下就決定照別人的android apps架構下去寫, 下一步就是要學會看懂別人提供的WSDL檔案,看懂之後就開始寫程式跟測試了.

Web Service Client:
1.甚麼是WS ? 一言以蔽之, 就是你的程式去call別人寫好的function, 誰寫程式不call function的?差別是這個function存在遠在天邊的某台server上面. 你的程式去call別人,你就是client, 別人提供給你,他就是server. 本範例只示範WS client端的程式.

2.提供WS的server網址(WSDL檔案超連結)如下(這是一個華氏攝氏溫度互轉):
http://www.w3schools.com/webservices/tempconvert.asmx?wsdl

3.android SOAP套件,請到下列網址下載:
http://code.google.com/p/ksoap2-android/
下載後將.jar放在你自己的專案資料夾內,打開eclipse後,滑鼠點選你的專案右鍵,選build path/configure build path, 選Add JARs, 選你剛下載的那個.jar後按OK.

4.如何解讀WSDL檔案? 請參考底下這張圖.
圖中標出URL(就是WSDL檔案的hyperlink),NAMESPACE,METHOD,要傳入的引數都是待會程式中需要用到.
 
5.因為需要上網的功能, 所以在AndroidMainfest.xml內有加入INTERNET permission.
6.android 4.0以後,不允許main thread內有internet行為,所以改用thread寫法來更新view,
7.若WS server是用微軟.net寫的, env.dotNET=true;此行程式碼一定要加上去.
 
所有程式碼下載連結:
 
2014/3/9更新
近日發現server端有問題, 去抓最新的wsdl檔來看(www.w3schools.com/webservices/tempconvert.asmx?wsdl),
發現targetNamespace有更動,將它改成http://www.w3schools.com/webservices/就ok了!