網頁

2015年6月30日 星期二

[iSpy] Android iSpy Client

 

iSpy 有一個 iSpyConnect 可以作為 iSpyServer 的 Android client 端. 雖然 iSpy 是 open source, 但是, android 的這一個 app 卻沒有 source code. 這裡記錄製作 Android 上 app 來連上 iSpyServer 的注意事項.

程式部份, 因為包含好幾個檔案, 在還沒有放到公開的伺服器之前, 沒有打算在網頁上貼原始碼, 視覺效果不好. 不過有興趣可以 mail 給我 :) 程式是可以正常動作的. 有圖有真相嘛, 貼上手機上的截圖. 這邊只說明程式需要那些組成, 以及 coding 的時候, 所需要注意的一些事項.

device-2015-06-30-112637

以及 iSpyServer 的截圖

iSpyServer

程式基本組成

AndroidManifest.xml

URL

Socket

SurfaceView

Thread

Buffer management

AndroidManifest.xml

要加入網路存取的權限

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

URL

iSpyServer 提供的連線網址, 像是 http://192.168.1.150:80/?camid=1, 但是如果用 Android 的 HttpGet 是不能轉出 iSpyServer 所需要的

GET /camid=1 HTTP/1.1
Host: 192.168.1.150

這樣的格式, 所以, 只好從 Socket 開始 coding.

另外, Android 不允許在程式的 UI Thread 中, 去做有關網路的存取, 因此, 這部份也必需另外以 Thread 實作.

SurfaceView

由於畫面更新的速度要求比較高, 因此必需實作 SurfaceView 的衍生類別, 在 SurfaceView 中, 再實作一個 Thread, 專職收取畫面, 並且更新.

Activity 的訊息傳遞

Activity 的 onPause/onResume 必須傳遞到 SurfaceView.

Receive Buffer 管理

socket 所收到的資料, 不會是剛好一張圖片, 因此, 必需先把收到的資料放到 buffer, 再到 buffer 中去剖析圖片資料. 如果是以 C++ 實作, 這部份的 overhead 比較小, 但是 Java 並沒有指標型態, 物件都需要透過記憶體傳遞. 這部份的實作效率會有很大的影響.

沒有留言:

張貼留言

請提供您寶貴的意見