基于Android的位置實時監控系統的設計與實現
3.3 程序實現
本文引用地址:http://www.j9360.com/article/273085.htm一是接收發送過來的經緯度信息。本設計為直觀顯示經緯度信息,在加載地圖的同時,顯示在“短信內容:”部分。其接收功能實現代碼如下:
/**
* 監聽收到的短信
*/
private final class SmsObserver extends ContentObserver {
public SmsObserver(Handler handler) {
super(handler);
}
public void onChange(boolean selfChange) {
ContentResolver resolver = getContentResolver();
//查到發出的短信
Uri uri = Uri.parse("content://sms/inbox");
Cursor cursor = resolver.query(uri, new String[] { "address", "body" }, null, null, "_id desc limit 1");
if (cursor.moveToNext()) {
String address = cursor.getString(0);
if (address.equals("此處為被監控對象的手機號碼")) {
String body = cursor.getString(1);
smsContent.setText(body);
SearchButtonProcess(body);
}
}
}
二是實現電子地圖上的位置顯示。僅僅有經緯度信息,監控者無法直觀地了解被監控對象的方位。所以在監控端軟件上,加載百度地圖實現被監控對象的實時監控,運行結果如圖8所示。其實現代碼如下:
/**
* 對收到的地點發起搜索并顯示在地圖上
*
* @param v
*/
private void SearchButtonProcess(String smsContent) {
try {
// 逗號分隔過濾得到經緯度字符串
String[] point = smsContent.split(",");
// 獲取到的字符串需要轉化成long,然后long值需要乘1e6后轉化為int
String latitudeStr = point[0];
String longitudeStr = point[1];
GeoPoint ptCenter = new GeoPoint((int)(Float.valueOf(latitudeStr)*1e6),
(int)(Float.valueOf(longitudeStr)*1e6));
// 反Geo搜索
mSearch.reverseGeocode(ptCenter);
} catch (Throwable e) {
Toast.makeText(MainActivity.this, "SearchButtonProcess Error", Toast.LENGTH_LONG).show();
}
4 系統測試結果
如果被監控端和監控端都采用Android手機平臺,可以充分利用Android提供的豐富的接口,使系統具有更好的擴展性和實用性。該系統進一步改進還可以實現拍照、截圖、標注和查看軌跡等功能。
5 結束語
該系統結構簡單、功能明確,軟件界面方便美觀,設計完成后該系統在自己家庭中進行試用。經過實際生活中的運用證明,該系統可對家中的老人或者孩子進行位置的實時監控,并根據其位置信息家庭成員可以判斷是否正常,及時打電話確保安全。此外在本系統的設計基礎上,添加LED的顯示模塊也可以應用到城市公交當中去,為乘客向導系統(PIS,Passenger Information System)的建立提供了一些方法和思路。還可以通過司機的Android操作系統手機,實現遠程運輸車輛的全程監控,極大地降低成本。
評論