尹國偉 王文生 孫志國 王曦光
摘 ?要:基于Android的農技推廣信息化平臺結合移動智能設備特點,有針對性地為農技員設計服務農戶、報送信息、分享交流等功能,進一步豐富農技推廣工作的信息化手段。Android端農技推廣移動應用是WEB版的延伸和補充;通過將字符處理、圖片處理、音頻處理、終端控制、通信交互等功能塊進行有機組合以滿足農技員需求;在示范應用過程中,要重視示范點的確定、示范農技員的遴選、移動終端的配備、通信流量的設定、移動應用的使用培訓、用戶的反饋響應等環(huán)節(jié)。
關鍵詞:Android;農技推廣;信息化平臺;設計思路;示范應用
中圖分類號:S126 ? ?文獻標志碼:B ? ?論文編號:2014-0340
Design, Implementation and Demonstration of the Android Version of
Agro-Technique Extension Information Platform
Yin Guowei, Wang Wensheng, Sun Zhiguo, Wang Xiguang
(Agricultural Information Institute of CAAS, Beijing 100081, China)
Abstract: The Android version of agro-technique extension information platform which further enriched the means of agro-technique extension targeted for the agro-technique extension workers. The functions of farmer service, information submission and experience sharing were designed with mobile intelligent equipment characteristics. This paper reviewed the design idea of the Android terminal mobile application; the character processing, image processing, audio processing, terminal control, communication interaction function was explained briefly. In the process of demonstration, the demonstration point determination, demonstration member selection, the mobile terminal equipment, communication flow setting, training in the use of mobile applications and user feedback response were all indispensable link and need to pay enough attention to.
Key words: Android; Agro-Technique Extension; Information Platform; Design Idea; Demonstration
0 ?引言
中央一號文件已連續(xù)多年聚焦三農相關問題,隨著國家對三農工作的大力扶持和現代農業(yè)的不斷推進,農技推廣體系在三農工作中的作用亟需得到充分發(fā)揮[1]。國內農技推廣體系龐雜,農技推廣人員素質參差不齊,為有效地管理農技推廣體系、提升農技推廣人員素質能力,國家農業(yè)部等相關部門充分發(fā)揮信息技術的優(yōu)勢,促進了農技推廣信息化的進一步發(fā)展。
農技推廣信息化平臺是專門面向農技推廣體系、為農技推廣人員提供服務的信息系統(tǒng),是農技推廣信息化的重要組成部分,在四化同步背景下,農技推廣工作的發(fā)展起到了良好的促進作用。農技推廣信息化平臺是在總結中國農業(yè)推廣網多年運營經驗的基礎上,結合農業(yè)部相關部門的信息上報系統(tǒng),通過實地調研、三農信息資源機構的合作洽談和專家論證進行了長期的設計和開發(fā)。
系統(tǒng)前期開發(fā)工具選用微軟.Net平臺,可以通過臺式機和3G上網本的瀏覽器獲取B/S模式提供的信息服務[2],并開發(fā)了基于Android[3-4]的瀏覽器和客戶端本地化融合的移動應用原型;后期遷移到開放的Java平臺,伴隨智能手機的快速普及,主要通過瀏覽器和Android智能手機提供信息服務;目前服務端和移動端的開發(fā)采用敏捷方式進行快速迭代[5],以及時對用戶反饋作出響應,不斷完善功能,持續(xù)提升用戶體驗。筆者主要以農技員角色下的應用服務為例進行,就基層農技推廣信息化平臺Android端移動應用的設計思路、實現方式及示范應用情況進行總結分享,供相關工作人員參考。
1 ?設計
1.1 ?設計思路
基層農技推廣信息化平臺Android端移動應用的設計源于Android智能手機的快速普及和瀏覽器展現形式的擴充需求。為了快速開發(fā)移動應用原型,初期設定的策略為:將移動應用作為瀏覽器的延伸,將瀏覽器中比較容易在Android系統(tǒng)中實現的功能進行移植[6],在智能移動終端采用“本地化殼子排布鏈接+瀏覽器端內容嵌套”的模塊化方式。隨著深入開發(fā)的推進,目前移動端應用的本地化程度已經非常高,并且逐步加入了能夠體現移動端優(yōu)勢的功能,如拍照、錄音、定位服務等。圖1為農技推廣信息化平臺設計演進路線。
1.2 ?功能描述
基層農技推廣信息化平臺的用戶主要來自農技推廣體系,包括農技員、各級管理員、農技專家等,在瀏覽器版中對用戶角色進行了劃分,不同角色配置了各自對應的權限。筆者主要就基層農技推廣信息化平臺Android端移動應用中涉及農技員角色的相關功能做簡單介紹。
通過賬號登錄Android客戶端應用之后,農技員角色主要涉及的功能分為6個模塊——推廣服務、信息采集、經驗交流、快速鏈接、登錄、更多配置(如圖2)。6個模塊又細分為28個功能點,功能框架如圖3所示。
農技員通過Android終端應用登錄基層農技推廣信息化平臺,可以享受瀏覽器版的基本功能,并能夠體驗移動應用所帶來的便捷,移動終端應用、服務器、數據存儲部件之間的數據交互抽象序列[7](如圖4、圖5)。
移動應用中的功能展現形式及內容,是依據用戶需求和移動終端特點所設定。這些功能是由有限的基本功能塊通過不同組合得出的,這些基本功能塊包括字符處理、圖片處理、音頻處理、數據存儲、終端控制、通信交互等。
基本功能塊可繼續(xù)細分為各個操作點:字符處理包括字符的輸入、輸出,時間的獲取、校驗,地理位置信息的獲取、解析、展示;圖片處理包括拍照、壓縮、圖片存儲、圖片選擇;音頻處理包括加載錄音插件、執(zhí)行錄音、音字轉換、結果顯示;數據存儲主要是指在終端對數據進行暫存的一些操作;終端控制包括適應性界面展示、網絡狀態(tài)判斷、撥打電話、應用升級;通信交互包括移動終端與服務器端之間不同種類數據的上傳下載、版本檢測等。
2 ?實現
基層農技推廣信息化平臺Android端移動應用所使用的開發(fā)工具為Eclipse[8],編程語言為Java,采用面向對象的開發(fā)模式,引入敏捷開發(fā)的理念來實施相關設計方案。以下就各基本功能塊的實現方式作簡要介紹。
2.1 ?基本功能塊的實現
2.1.1 ?字符處理 ?字符處理包括字符的輸入、輸出,時間的獲取、校驗,地理位置信息的獲取、解析、展示;由于Android系統(tǒng)及SDK[9],具有較完備的基本字符處理控件、類、方法、地理數據恢復機制[10]等,在處理過程中根據業(yè)務需要進行適當調用即可,大致流程如圖6所示。
代碼片段:
//基本字符;
import android.widget.EditText;
private EditText contentEt;
contentEt = (EditText) findViewById(R.id.log_write_et_content);
//時間;
private TextView serviceTimeTv;
serviceTimeTv = (TextView) findViewById(R.id.log_write_tv_serviceTime);
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int monthOfYear = calendar.get(Calendar.MONTH);
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
String text = year + "-" + (monthOfYear + 1) + "-" + dayOfMonth;
serviceTimeTv.setText(text);
//地理位置;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
private LocationManager locationManager;
private SharedPreferences manager;
manager = PreferenceManager.getDefaultSharedPreferences(this);
locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
String provider = LocationManager.GPS_PROVIDER;
Location location = locationManager.getLastKnownLocation(provider);
getGPS(location);
locationManager.requestLocationUpdates(provider, 60 * 1000, 100,
locationListener);
2.1.2 ?圖片處理 ?圖片處理包括拍照、壓縮、圖片存儲、圖片選擇;其中拍照功能是調用Android系統(tǒng)自帶的相機控制類,圖片的壓縮則使用Android SDK中提供的位圖工廠類等提供的相應方法[11-12],大致處理流程如圖7所示。
// 圖片處理
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap image = null;
image = BitmapFactory.decodeFile(path, options);
double ratio = 1D;
if (maxWeight > 0 && maxHeight <= 0) {
ratio = Math.ceil(options.outWidth / maxWeight);
} else if (maxHeight > 0 && maxWeight <= 0) {
ratio = Math.ceil(options.outHeight / maxHeight);
} else if (maxHeight > 0 && maxWeight > 0) {
double ratio_height = options.outHeight / maxHeight;
double ration_weight = options.outWidth / maxWeight;
ratio = ratio_height > ration_weight ? ratio_height : ration_weight;
}
if (ratio > 1) {
options.inSampleSize = (int) ratio;
}else{
options.inSampleSize = 1;
}
options.inJustDecodeBounds = false ;
options.inPreferredConfig = Bitmap.Config.RGB_565;
image = BitmapFactory.decodeFile(path, options);
return image;
2.1.3 ?音頻處理 ?音頻處理(applied research on android of web services)[13-14]包括加載錄音插件、執(zhí)行錄音、音字轉換、結果顯示;音頻處理主要借助訊飛語音輸入插件,完成音頻的獲取工作,整體流程如圖8所示。
// 音頻處理
import com.iflytek.speech.RecognizerResult;
import com.iflytek.speech.SpeechError;
import com.iflytek.speech.SpeechConfig.RATE;
import com.iflytek.ui.RecognizerDialog;
import com.iflytek.ui.RecognizerDialogListener;
public void onResults(ArrayList
StringBuilder builder = new StringBuilder();
for (RecognizerResult recognizerResult : results) {
builder.append(recognizerResult.text);
}
mResultText.append(builder);
mResultText.setSelection(mResultText.length());
}
2.1.4 ?終端控制 ?終端控制包括適應性界面展示、網絡狀態(tài)判斷、撥打電話、應用升級;其中適應性界面的構建過程,一方面基于Android項目已有的配置形式,一方面需要借助Android類庫提供的關于布局及獲取屏幕信息的類和方法,再通過程序將2個方面進行結合,就能比較好地呈現出具有良好體驗的界面,如圖9所示。
// 適應性界面
import android.content.res.Configuration;
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
} else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
}
}
// 網絡檢測
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm == null)
return false;
NetworkInfo netinfo = cm.getActiveNetworkInfo();
if (netinfo == null) {
return false;
}
if (netinfo.isAvailable()) {
return true;
}
return false;
}
// 撥打電話
public void onClick(View v) {
EditText phonenumber = (EditText) findViewById(R.id.phonenumber);
String number = et_phonenumber.getText().toString();
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"
+ number));
startActivity(intent);
}
// 安裝新版本
protected void installAPK(File apkFile) {
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(apkFile),
"application/vnd.android.package-archive");
startActivity(intent);
}
2.1.5 ?通信交互 ?通信交互包括移動終端與服務器端之間不同種類數據的上傳下載、版本檢測等。在通信交互過程中,目前主要基于KSOAP調用WebService[15]、HTTP協議以及SOCKET 3種方式。
代碼片段:
// 數據上傳
protected String upLoad(Context context,Map
NetUtil netUtil = new HttpClientImplUtil(context, map,url);
ProgressThread progressThread = new ProgressThread(netUtil);
progressThread.setDoPost();
Thread thread = new Thread(progressThread.getDoPost());
thread.start();
String result = "";
while(result.equals("")) {
result = progressThread.getResult();
}
return result;
}
// 版本檢測
protected void checkVersion(final Context context){
Map
map.put("clientVersion.versionCode", getVersionName());
NetUtil netUtil = new
HttpClientImplUtil(context,map,VERSION_CHECK);
ProgressThread progressThread = new ProgressThread(netUtil);
progressThread.setDoPost();
Thread thread = new Thread(progressThread.getDoPost());
thread.start();
String result = "";
while(result.equals("")) {
result = progressThread.getResult();
}
try {
JSONObject obj = new JSONObject(result);
if (!obj.getString("msg").equals("success")) {
toastShow(obj.getString("data"));
return;
}
boolean updateVersion = obj.getBoolean("data");
VersionUtils utils = new VersionUtils(context);
if (!updateVersion) {
utils.versionNoUse(map);
} else {
utils.versionUpdate(map);
}
} catch (JSONException e) {
toastShow("數據異常!");
e.printStackTrace();
}
}
2.2 ?界面展示
截取了Android端應用中的登錄、推廣服務、信息采集、經驗交流、快捷方式、系統(tǒng)配置、填寫日志、填寫處方、發(fā)布交流等界面,如圖10所示。
由圖10可看出,整體界面風格簡約,以模塊化為主,不超過4次界面切換即可到達任何功能的最終界面:打開應用、登錄、選擇功能、執(zhí)行操作。
3 ?示范應用
目前,基層農技推廣信息化平臺Android端移動應用的版本為V2.35,已經在北京、河南、江蘇[16]、云南、河北等省市的縣一級農技推廣機構中開展了示范應用。在示范應用過程中,示范點的確定、示范農技員的遴選、移動終端的配備、通信流量的設定、移動應用的使用培訓、用戶的反饋響應等是必不可少的環(huán)節(jié),需要給予足夠的重視,以便于開展示范應用的各相關工作。
示范點要選取信息化基礎設施較完備、農技推廣體系運轉高效、能起到示范帶動作用的區(qū)域;示范農技員則要將信息化水平、信息化意識、業(yè)務能力、個人影響力等作為遴選標準;移動終端的配備要充分考慮經費來源、終端便攜程度、易操作程度、電量續(xù)航能力、拍照質量好壞等因素;通信流量要注意與運營商、當地政府等充分合作,制定適宜的套餐資費,有效地控制流量成本;移動應用的使用培訓要確保培訓場地的網絡通暢,提前了解用戶的基本情況,將如何安裝移動應用作為培訓的一部分內容,通過手機管理軟件用投影實時地向用戶展示操作流程,充分發(fā)揮信息化水平高的用戶的幫帶作用;要與用戶充分溝通,深入挖掘用戶需求,及時響應用戶反饋。
示范應用的目的是通過部分區(qū)域、少量用戶的使用,帶動其他地區(qū)、更多用戶能夠更便捷地使用該移動應用。通過到實地現場培訓農技員使用基層農技推廣信息化平臺Android端移動應用,以及用戶的使用反饋,總結了很多經驗教訓,在使平臺逐步完善的基礎上,利于以后開展更大范圍的示范應用。
4 ?結語
隨著示范區(qū)域和用戶的增加,農技推廣信息化平臺將面臨的大用戶量訪問對系統(tǒng)運行穩(wěn)定性的挑戰(zhàn),服務端的設計架構以及服務端與客戶端的交互模式將進行適當調整,以滿足不斷變化的需求。
基于Android的農技推廣信息化平臺為農技推廣體系提供了一種信息化手段來開展農技工作,為農技員配置了一套信息化工具來提升工作效率,為推進農業(yè)農村信息化的發(fā)展做了有益嘗試,供相關領域研究工作者參考。
參考文獻
[1] 王文生.中央1號文件的農業(yè)農村信息化政策研讀[J].中國農村科技,2012,7:22-26.
[2] 王文生.搭建3G信息化平臺 創(chuàng)新基層農技推廣體系[J].世界電信.2011(6):41-44.
[3] 宋小倩,周東升.基于Android平臺的應用開發(fā)研究[J].軟件導刊,2011,10(2):104-105.
[4] Meghann Drury, Kieran Conboy, Ken Power. Obstacles to decision making in Agile software development teams[J]. Journal of Systems and Software,2012,85(6):1239-1254.
[5] 張躍坤,程鐵信,王學海,等.項目管理信息系統(tǒng)敏捷開發(fā)雙向迭代模型及其應用[J].中小企業(yè)管理與科技,2013(10):287-288.
[6] 劉敏.移動終端的Android移植與應用程序設計[D].西安:西安電子科技大學,2011.
[7] 張亞紅,張琳琳,趙楷等.基于UML 2.0序列圖的Web服務運行時驗證方法[J].計算機科學,2013(07):138-142.
[8] 宮愛愛,丁香乾,侯瑞春.基于Eclipse智能代碼生成框架的研究[J].現代電子技術,2013(18):55-58.
[9] 吳想想.基于Android平臺軟件開發(fā)方法的研究與應用[D].北京:北京郵電大學,2011.
[10] 吳熙曦,李炳龍.基于Android平臺的智能手機地理數據恢復[J].武漢大學學報:理學版,2013(5):449-452.
[11] 林晨,張夢杰.Android平臺圖像處理軟件框架的研究與設計[J].硅谷,2011(23).
[12] 郭文川,周超超,韓文霆.基于Android手機的植物葉片面積快速無損測量系統(tǒng)[J].農業(yè)機械學報,2014(1):275-280.
[13] 劉憲濤.基于Android平臺的手機語音識別服務客戶端系統(tǒng)的設計與實現[D].北京:北京郵電大學,2013.
[14] 梁昌銀,雒江濤,周麗嫻.基于Android平臺聲控應用的研究與開發(fā)[J].電聲技術,2013(12):70-74.
[15] 彭海文.Android Web Services應用研究[J].電腦知識與技術,2011(12):2851-2852.
[16] 楊勇.基層農技推廣信息化平臺示范應用的成效與體會[J].中國農村科技,2012(7):31-33.