尹国伟,王文生,孙志国,王曦光
(中国农业科学院农业信息研究所,北京100081)
摘要:基于Android 的农技推广信息化平台结合移动智能设备特点,有针对性地为农技员设计服务农户、报送信息、分享交流等功能,进一步丰富农技推广工作的信息化手段。Android 端农技推广移动应用是WEB版的延伸和补充;通过将字符处理、图片处理、音频处理、终端控制、通信交互等功能块进行有机组合以满足农技员需求;在示范应用过程中,要重视示范点的确定、示范农技员的遴选、移动终端的配备、通信流量的设定、移动应用的使用培训、用户的反馈响应等环节。
教育期刊网 http://www.jyqkw.com
关键词 :Android;农技推广;信息化平台;设计思路;示范应用
中图分类号:S126 文献标志码:B 论文编号:2014-0340
Design, Implementation and Demonstration of the Android Version ofAgro-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 themeans of agro-technique extension targeted for the agro-technique extension workers. The functions of farmerservice, information submission and experience sharing were designed with mobile intelligent equipmentcharacteristics. This paper reviewed the design idea of the Android terminal mobile application; the characterprocessing, image processing, audio processing, terminal control, communication interaction function wasexplained briefly. In the process of demonstration, the demonstration point determination, demonstrationmember selection, the mobile terminal equipment, communication flow setting, training in the use of mobileapplications 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 引言
中央一号文件已连续多年聚焦三农相关问题,随着国家对三农工作的大力扶持和现代农业的不断推进,农技推广体系在三农工作中的作用亟需得到充分发挥[1]。国内农技推广体系庞杂,农技推广人员素质参差不齐,为有效地管理农技推广体系、提升农技推广人员素质能力,国家农业部等相关部门充分发挥信息技术的优势,促进了农技推广信息化的进一步发展。农技推广信息化平台是专门面向农技推广体系、为农技推广人员提供服务的信息系统,是农技推广信息化的重要组成部分,在四化同步背景下,农技推广工作的发展起到了良好的促进作用。农技推广信息化平台是在总结中国农业推广网多年运营经验的基础上,结合农业部相关部门的信息上报系统,通过实地调研、三农信息资源机构的合作洽谈和专家论证进行了长期的设计和开发。
系统前期开发工具选用微软.Net平台,可以通过台式机和3G上网本的浏览器获取B/S模式提供的信息服务[2],并开发了基于Android[3-4]的浏览器和客户端本地化融合的移动应用原型;后期迁移到开放的Java平台,伴随智能手机的快速普及,主要通过浏览器和Android智能手机提供信息服务;目前服务端和移动端的开发采用敏捷方式进行快速迭代[5],以及时对用户反馈作出响应,不断完善功能,持续提升用户体验。笔者主要以农技员角色下的应用服务为例进行,就基层农技推广信息化平台Android端移动应用的设计思路、实现方式及示范应用情况进行总结分享,供相关工作人员参考。
1 设计
1.1 设计思路
基层农技推广信息化平台Android 端移动应用的设计源于Android 智能手机的快速普及和浏览器展现形式的扩充需求。为了快速开发移动应用原型,初期设定的策略为:将移动应用作为浏览器的延伸,将浏览器中比较容易在Android系统中实现的功能进行移植[6],在智能移动终端采用“本地化壳子排布链接+浏览器端内容嵌套”的模块化方式。随着深入开发的推进,目前移动端应用的本地化程度已经非常高,并且逐步加入了能够体现移动端优势的功能,如拍照、录音、定位服务等。图1为农技推广信息化平台设计演进路线。
1.2 功能描述
基层农技推广信息化平台的用户主要来自农技推广体系,包括农技员、各级管理员、农技专家等,在浏览器版中对用户角色进行了划分,不同角色配置了各自对应的权限。笔者主要就基层农技推广信息化平台Android 端移动应用中涉及农技员角色的相关功能做简单介绍。
通过账号登录Android 客户端应用之后,农技员角色主要涉及的功能分为6 个模块——推广服务、信息采集、经验交流、快速链接、登录、更多配置(如图2)。6 个模块又细分为28 个功能点,功能框架如图3所示。
农技员通过Android 终端应用登录基层农技推广信息化平台,可以享受浏览器版的基本功能,并能够体验移动应用所带来的便捷,移动终端应用、服务器、数据存储部件之间的数据交互抽象序列[(7] 如图4、图5)。
移动应用中的功能展现形式及内容,是依据用户需求和移动终端特点所设定。这些功能是由有限的基本功能块通过不同组合得出的,这些基本功能块包括字符处理、图片处理、音频处理、数据存储、终端控制、通信交互等。
基本功能块可继续细分为各个操作点:字符处理包括字符的输入、输出,时间的获取、校验,地理位置信息的获取、解析、展示;图片处理包括拍照、压缩、图片存储、图片选择;音频处理包括加载录音插件、执行录音、音字转换、结果显示;数据存储主要是指在终端对数据进行暂存的一些操作;终端控制包括适应性界面展示、网络状态判断、拨打电话、应用升级;通信交互包括移动终端与服务器端之间不同种类数据的上传下载、版本检测等。
2 实现
基层农技推广信息化平台Android 端移动应用所使用的开发工具为Eclipse[8],编程语言为Java,采用面向对象的开发模式,引入敏捷开发的理念来实施相关设计方案。以下就各基本功能块的实现方式作简要介绍。
2.1 基本功能块的实现
2.1.1 字符处理字符处理包括字符的输入、输出,时间的获取、校验,地理位置信息的获取、解析、展示;由于Android 系统及SDK[9],具有较完备的基本字符处理控件、类、方法、地理数据恢复机制[10]等,在处理过程中根据业务需要进行适当调用即可,大致流程如图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);
//地理位置;
<uses- permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
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 系统自带的相机控制类,图片的压缩则使用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 androidof web services)[13-14]包括加载录音插件、执行录音、音字转换、结果显示;音频处理主要借助讯飞语音输入插件,完成音频的获取工作,整体流程如图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<
RecognizerResult> results,boolean isLast) {
StringBuilder builder = new StringBuilder();
for (RecognizerResult recognizerResult :
results) {
builder.append(recognizerResult.text);
}
mResultText.append(builder);
mResultText.setSelection(mResultText.length());
}
2.1.4 终端控制终端控制包括适应性界面展示、网络状态判断、拨打电话、应用升级;其中适应性界面的构建过程,一方面基于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) {
}
}
// 网络检测
<uses- permission android:name="android.permission.INTERNET" />
<uses- permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses- permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses- permission android:name="android.permission.ACCESS_WIFI_STATE" />
public static boolean isNetworkAvailable(Contextcontext) {
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;
}
// 拨打电话
<uses- permission android:name="android.permission.CALL_PHONE"></uses-permission>
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.packagearchive");
startActivity(intent);
}
2.1.5 通信交互通信交互包括移动终端与服务器端之间不同种类数据的上传下载、版本检测等。在通信交互过程中,目前主要基于KSOAP 调用WebService[15]、HTTP协议以及SOCKET 3种方式。
代码片段:
// 数据上传
protected String upLoad(Context context,Map<String,
String> map,String url) {
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<String, String> map = new HashMap<String,
String>();
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 端应用中的登录、推广服务、信息采集、经验交流、快捷方式、系统配置、填写日志、填写处方、发布交流等界面,如图10所示。
由图10 可看出,整体界面风格简约,以模块化为主,不超过4 次界面切换即可到达任何功能的最终界面:打开应用、登录、选择功能、执行操作。
3 示范应用
目前,基层农技推广信息化平台Android 端移动应用的版本为V2.35,已经在北京、河南、江苏[16]、云南、河北等省市的县一级农技推广机构中开展了示范应用。在示范应用过程中,示范点的确定、示范农技员的遴选、移动终端的配备、通信流量的设定、移动应用的使用培训、用户的反馈响应等是必不可少的环节,需要给予足够的重视,以便于开展示范应用的各相关工作。
示范点要选取信息化基础设施较完备、农技推广体系运转高效、能起到示范带动作用的区域;示范农技员则要将信息化水平、信息化意识、业务能力、个人影响力等作为遴选标准;移动终端的配备要充分考虑经费来源、终端便携程度、易操作程度、电量续航能力、拍照质量好坏等因素;通信流量要注意与运营商、当地政府等充分合作,制定适宜的套餐资费,有效地控制流量成本;移动应用的使用培训要确保培训场地的网络通畅,提前了解用户的基本情况,将如何安装移动应用作为培训的一部分内容,通过手机管理软件用投影实时地向用户展示操作流程,充分发挥信息化水平高的用户的帮带作用;要与用户充分沟通,深入挖掘用户需求,及时响应用户反馈。
示范应用的目的是通过部分区域、少量用户的使用,带动其他地区、更多用户能够更便捷地使用该移动应用。通过到实地现场培训农技员使用基层农技推广信息化平台Android 端移动应用,以及用户的使用反馈,总结了很多经验教训,在使平台逐步完善的基础上,利于以后开展更大范围的示范应用。
4 结语
随着示范区域和用户的增加,农技推广信息化平台将面临的大用户量访问对系统运行稳定性的挑战,服务端的设计架构以及服务端与客户端的交互模式将进行适当调整,以满足不断变化的需求。
基于Android 的农技推广信息化平台为农技推广体系提供了一种信息化手段来开展农技工作,为农技员配置了一套信息化工具来提升工作效率,为推进农业农村信息化的发展做了有益尝试,供相关领域研究工作者参考。
教育期刊网 http://www.jyqkw.com
参考文献
[1] 王文生.中央1 号文件的农业农村信息化政策研读[J].中国农村科技,2012,7:22-26.
[2] 王文生.搭建3G信息化平台创新基层农技推广体系[J].世界电信.2011(6):41-44.
[3] 宋小倩,周东升.基于Android 平台的应用开发研究[J].软件导刊,2011,10(2):104-105.
[4] Meghann Drury, Kieran Conboy, Ken Power. Obstacles to decisionmaking in Agile software development teams[J]. Journal of Systemsand Software,2012,85(6):1239-1254.
[5] 张跃坤,程铁信,王学海,等.项目管理信息系统敏捷开发双向迭代模型及其应用[J].中小企业管理与科技,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 平台软件开发方法的研究与应用[D].北京:北京邮电大学,2011.
[10] 吴熙曦,李炳龙.基于Android 平台的智能手机地理数据恢复[J].武汉大学学报:理学版,2013(5):449-452.
[11] 林晨,张梦杰.Android 平台图像处理软件框架的研究与设计[J].硅谷,2011(23).
[12] 郭文川,周超超,韩文霆.基于Android 手机的植物叶片面积快速无损测量系统[J].农业机械学报,2014(1):275-280.
[13] 刘宪涛.基于Android 平台的手机语音识别服务客户端系统的设计与实现[D].北京:北京邮电大学,2013.
[14] 梁昌银,雒江涛,周丽娴.基于Android 平台声控应用的研究与开发[J].电声技术,2013(12):70-74.
[15] 彭海文.Android Web Services 应用研究[J].电脑知识与技术,2011(12):2851-2852.
[16] 杨勇.基层农技推广信息化平台示范应用的成效与体会[J].中国农村科技,2012(7):31-33.