摘自:http://blog.csdn.net/zc2007/article/details/2340436

1引言

MMI(ManMachineInter-face),即人机界面,它负责和用户的交互,在必要的时候调用其它模块的功能。MMI模块在整个系统中处于最 高层,主要实现人机交互的功能,即解释用户的各种命令并发消息到相应的处理模块,同时将系统接收到的各种消息或系统所处的状态以界面友好的方式反馈给用 户。它由管理人机界面交互的任务实现。MMI软件利用面向对象的程序设计方法,平台采用消息循环驱动机制,实现对下层核心代码的抽象、隔离和封装,从而使 得MMI软件同硬件平台和下层软件的相关性降低。在完成大型的应用软件开发过程中,便于分组分工合作。

目前,各个手机厂商正在将越来越多的注意力集中到人机界面的设计上,力争提供给用户一个美观易用、功能齐全的操作平台。显示屏由原先的黑白小屏幕显示,发展为现在的真彩色大屏幕,存储容量也快速增长,硬件设备的高速发展,为人机接口的各种改进提供了可靠性。

为了更好地实现上述功能,手机MMI软件应该做到以下几点。

·软件工作稳定可靠,与低层软件接口方便,以保证整机的性能。

·选用代码效率高,可移植性好的编程语言,以便提高产品的性能价格比,降低开发成本。

·运用图形、动画、汉化界面及汉字功能,美化产品、方便使用。

·精心组织程序结构,使软件结构清晰,各个模块独立性强、可扩充性高、可封装性好,便于开发小组分工合作以及各阶段开发成果的充分利用,缩短产品开发周期。

本文围绕MMI软件架构和消息驱动机制,结合短消息的发送,粗略地对手机软件开发作介绍。

2手机MMI应用程序的分层结构

手机软件的主体系统架构由两部分组成:底层的操作系统、协议栈、协议驱动与上层的手机平台。


图1

手机性能的好坏直接取决于手机平台的搭建。好的平台能实现模块化管理,各个模块之间的独立性高,便于修改,节约成本。这里就涉及到人机界面的设计,我们把MMI应用程序自下而上分为三个层次,分别是抽象层、核心层和应用层。如图1所示。

抽象层由操作系统抽象层(OSAL)、协议栈抽象层(PASL)和硬件抽象层(PSAL)组成。此模块可以将目标操作系统抽象出来,使核心层和应用层与目标操作系统无关,实现良好的可移植性,缩短产品的开发周期,保证产品快速上市;也可以将目标平台的无线通信相关部分抽象出来,与协议栈通信,完成AT命令的交互,可以提供与电话功能和SIM卡功能相关的操作,包括语音通话、短消息、小区广播、SIM卡数据访问、STK、PLMN网络注册等;也可以完成设备抽象如液晶屏、键盘、音频播放器等,综合它们的共同点,与下层隔离。

核心层是MMI程序的灵魂,在软件结构中起承上启下的作用。它主要由图形用户界面(GUI)、窗口管理、消息管理、应用引擎组成。引擎与界面无关,文件 I/O采用ANSIC标准,方便在各种系统上的移植。如短消息的引擎专门负责短消息的接收、分发、发送、存储和管理,它仅依赖于抽象层,向上层应用程序提 供一整套短消息相关的API,从而达到简化应用程序编程的目的,使界面定制更加方便快捷。关于窗口管理和消息管理下文将作详细的介绍。

应用层是手机多样化的体现,厂家可以针对不同的消费群体量身定制。一般手机都提供短消息、通话、设置等基础应用,还包括照相、MP3等高级应用。

3MMI软件的核心结构——消息循环机制及窗口管理


图2

MMI软件有一个主程序,主要作用是建立消息循环,负责分发消息。由于MMI软件采用面向对象的程序设计方法,平台采用消息循环驱动机制,实现对下层核心 代码的抽象、隔离和封装,从而应用程序的运行需要依靠外部发生的事件来驱动,即程序所做的一切都是响应发送给窗口过程的消息。如图2所示。

一个简单的消息环含有下列函数的调用:GetMessage、TranslateMessage和Dispatch-Message。

while(GetMessage(&msg,NULL, 0, 0)) 1引言

MMI(ManMachineInterface),即人机界面,它负责和用户的交互,在必要的时候调用其它模块的功能。MMI模块在整个系统中处于最高 层,主要实现人机交互的功能,即解释用户的各种命令并发消息到相应的处理模块,同时将系统接收到的各种消息或系统所处的状态以界面友好的方式反馈给用户。 它由管理人机界面交互的任务实现。MMI软件利用面向对象的程序设计方法,平台采用消息循环驱动机制,实现对下层核心代码的抽象、隔离和封装,从而使得 MMI软件同硬件平台和下层软件的相关性降低。在完成大型的应用软件开发过程中,便于分组分工合作。

目前,各个手机厂商正在将越来越多的注意力集中到人机界面的设计上,力争提供给用户一个美观易用、功能齐全的操作平台。显示屏由原先的黑白小屏幕显示,发展为现在的真彩色大屏幕,存储容量也快速增长,硬件设备的高速发展,为人机接口的各种改进提供了可靠性。

为了更好地实现上述功能,手机MMI软件应该做到以下几点。

·软件工作稳定可靠,与低层软件接口方便,以保证整机的性能。

·选用代码效率高,可移植性好的编程语言,以便提高产品的性能价格比,降低开发成本。

·运用图形、动画、汉化界面及汉字功能,美化产品、方便使用。

·精心组织程序结构,使软件结构清晰,各个模块独立性强、可扩充性高、可封装性好,便于开发小组分工合作以及各阶段开发成果的充分利用,缩短产品开发周期。

本文围绕MMI软件架构和消息驱动机制,结合短消息的发送,粗略地对手机软件开发作介绍。

2手机MMI应用程序的分层结构

手机软件的主体系统架构由两部分组成:底层的操作系统、协议栈、协议驱动与上层的手机平台。

手机性能的好坏直接取决于手机平台的搭建。好的平台能实现模块化管理,各个模块之间的独立性高,便于修改,节约成本。这里就涉及到人机界面的设计,我们把MMI应用程序自下而上分为三个层次,分别是抽象层、核心层和应用层。如图1所示。

抽象层由操作系统抽象层(OSAL)、协议栈抽象层(PASL)和硬件抽象层(PSAL)组成。此模块可以将目标操作系统抽象出来,使核心层和应用层与目 标操作系统无关,实现良好的可移植性,缩短产品的开发周期,保证产品快速上市;也可以将目标平台的无线通信相关部分抽象出来,与协议栈通信,完成AT命令 的交互,可以提供与电话功能和SIM卡功能相关的操作,包括语音通话、短消息、小区广播、SIM卡数据访问、STK、PLMN网络注册等;也可以完成设备 抽象如液晶屏、键盘、音频播放器等,综合它们的共同点,与下层隔离。

核心层是MMI程序的灵魂,在软件结构中起承上启下的作用。它主要由图形用户界面(GUI)、窗口管理、消息管理、应用引擎组成。引擎与界面无关,文件 I/O采用ANSIC标准,方便在各种系统上的移植。如短消息的引擎专门负责短消息的接收、分发、发送、存储和管理,它仅依赖于抽象层,向上层应用程序提 供一整套短消息相关的API,从而达到简化应用程序编程的目的,使界面定制更加方便快捷。关于窗口管理和消息管理下文将作详细的介绍。

应用层是手机多样化的体现,厂家可以针对不同的消费群体量身定制。一般手机都提供短消息、通话、设置等基础应用,还包括照相、MP3等高级应用。

3MMI软件的核心结构——消息循环机制及窗口管理

MMI软件有一个主程序,主要作用是建立消息循环,负责分发消息。由于MMI软件采用面向对象的程序设计方法,平台采用消息循环驱动机制,实现对下层核心 代码的抽象、隔离和封装,从而应用程序的运行需要依靠外部发生的事件来驱动,即程序所做的一切都是响应发送给窗口过程的消息。如图2所示。

一个简单的消息环含有下列函数的调用:GetMessage、TranslateMessage和DispatchMessage。

while(GetMessage(&msg,NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

当收到来自底层的开机消息时,MMI软件进行初始化并创建基本窗口。基本窗口可以看作是MMI层所有窗口的“根”,其它窗口都是这个窗口的子窗口。到达 MMI层的消息,其它窗口不处理时,都送到基本窗口中作缺省处理。在基本窗口中,根据不同的情况,进行状态转换,分别创建等待、充电、等待插入SIM卡、 等待输入PIN(个人识别号)等子窗口,处理开机及关机过程中的各项工作。顺利完成各项开机工作后,转入待机状态,创建待机窗口。待机窗口可以完成拨号、 启动快捷键等工作,也可以进一步创建电话本等子窗口。如果因接听来电或拨打电话进入通话状态,取消待机窗口,创建通话窗口。

菜单窗口可以派生出一系列子窗口,形成一颗菜单树,这个菜单树把手机的各种功能有机组织在一起。各个菜单窗口都是菜单窗口类的实例。菜单的选择、显示等功能都在菜单类中完成。

GUI(图形用户界面)系统为MMI应用程序提供了以窗口为核心的用户界面和消息事件驱动的实现机制。GUI窗口管理模块为对话窗口、菜单、编辑及其他用 户输入输出操作提供了一个基本框架,为消息处理提供了基本手段。窗口管理收集所有的输入信息,然后把这些输入信息以消息的形式送往合适的窗口,由该窗口的 处理函数处理。

窗口消息在窗口函数中处理。每个窗口类都必须有一个窗口函数。MMI应用程序只要负责创建窗口、处理窗口产生的高级事件及窗口的异常情况。在这个环境中, 用户可以对消息作处理,也可以作缺省处理。窗口管理把来自键盘和软件中其它实体的消息送到具有当前焦点的窗口。在软件的整个运行过程中,总存在一个具有焦 点的窗口,它负责处理输入消息,或者把消息沿着从子窗口到父窗口方向的链表送到一个可以处理该消息的窗口。

应用程序必须删除和处理投递到它的线程消息队列中的消息,单一线程的应用程序一般在它的入口函数中使用一个消息环来删除消息,并把消息发送到相应的窗口过程进行处理。具有多重线程的应用程序在创建窗口的每一个线程中使用一个消息环。

4MMI层消息的产生及处理

MMI消息主要包括按键事件消息、协议栈消息及自定义消息等。GUI从几个源产生和获取消息,由底层键盘的输入消息;也可以由GUI系统产生(如通过 GUI提供的API函数调用或GUI系统为了响应应用程序给系统带来的变化,如窗口大小的改变),大多数这类消息是发送而不是投递的;也可由应用程序的运 行来产生,一个应用程序可以投递消息到自己的队列或其它应用程序的队列中去,也可以直接把消息发送到自己的窗口或其它应用程序的窗口中去。

GUI系统有两种方式向窗口过程发送消息:把消息投递到一个先进先出的消息队列,它是系统定义的内存块用于临时存储消息;或是把消息直接发送给窗口过程。GUI系统要用到消息队列,它要管理一个系统消息队列和任意数目线程消息队列,每个队列对应一个线程。

5短消息的发送实例


图3

下面以短消息发送为例简要说明。用户点击“短消息”菜单,进入短消息列表窗体。按“OK”键进入短消息编辑窗体,从而编写短消息的内容。编写完毕,点击“确定”,进入联系人窗体。最后,确认联系人号码进入发送窗体。传递的机制如图3所示。


图4

短消息发送程序涉及到很多模块,如何建立良好的通信机制是关键。程序中运用了回调函数和事件传送机制。如图4所示。

在回调函数的处理中,键盘事件的处理是最重要的。通常键盘事件被具有输入焦点的窗体首先获得,它如果处理这个键盘事件,在键盘回调函数中截获该键盘事件, 否则将此键盘事件按照消息队列,向上层窗口传递,直到有一个窗体将它截获。由于编辑窗体使用的是编辑框窗口类,编辑框窗口类封装良好,使得它本身可以处理 大部分键盘事件(如数字输入、文字输入等),但总有一些事件要进行特殊的处理以满足窗体的不同需求,这时需要与窗体之间进行通信。

6结束语

本文介绍的这种软件设计方法层次清晰、简洁,结构比较完善,有利于在较短的时间内开发出符合要求的移动终端软件。同时,进行MMI软件开发的整个过程模块可再用性好,便于开发小组分工合作。

转载于:https://www.cnblogs.com/jianghulang/archive/2012/04/03/2431257.html

手机MMI体系结构及其实现相关推荐

  1. 91手机助手电脑版官方版

    91手机助手电脑版 v5.5.8.135 官方版 软件大小:23.7MB 软件语言:简体中文 软件类别:手机工具 软件授权:官方版 更新时间:2014-12-24 应用平台:Win8/Win7/Vis ...

  2. 91手机助手电脑版 v5.6.5.1376 官方版

    91手机助手电脑版 v5.6.5.1376 官方版 软件大小:23.7MB 软件语言:简体中文 软件类别:手机工具 软件授权:官方版 更新时间:2015-04-21 应用平台:Win8/Win7/Vi ...

  3. 毕业了,我是先择业,还是先就业

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 版权声明:原创作品 ...

  4. 毕业了,我是先择业,还是先就业?

    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版.作者信息和本声明.否则将追究法律责任.本文地址: http://blog.csdn.net/jobchanceleo/archi ...

  5. 手机GSM--SIM卡体系结构

    http://blog.chinaunix.net/uid-21880738-id-1813147.html USIM:存储支持鉴权密钥K(是整个UMTS安全体系的核心).接受参数有:随机数(RAND ...

  6. 三星手机连接奥迪android功能,华为手机怎么跟奥迪mmi互联?手机投屏奥迪中控方法...

    我们都知道现在的新车基本上都搭载了投屏互联功能,其中最出名的就是苹果的CARPLAY了.但并不是所有人都用苹果手机,那么华为手机怎么跟奥迪mmi互联呢?其实只需要一根数据线你也可以用华为手机连接奥迪M ...

  7. android mmi 删除后自动回复,教大家小米手机自动恢复删除的信息怎么办

    近日有关于小米手机自动恢复删除的信息怎么办的问题受到了很多网友们的关注,大多数网友都想要知道小米手机自动恢复删除的信息怎么办的具体情况,那么关于到小米手机自动恢复删除的信息怎么办的相关信息,小编也是在 ...

  8. 主流手机OS与鸿蒙OS

    主流手机OS与鸿蒙OS 对于一款手机而言,硬件是外在基础,手机系统才是一个手机的内在核心,是一家手机厂商的个性体现.现在大家熟知的的主流手机系统有iOS.Android以及WindowsPhone,其 ...

  9. Android必备:Android的体系结构

    2019独角兽企业重金招聘Python工程师标准>>> 链接地址:http://www.xx566.com/detail/107.html 最近一个月接触Android,开始做一些a ...

最新文章

  1. 土地利用转移矩阵图怎么做_土地利用转移矩阵生成的几种方法
  2. javascript事件模型框架
  3. ASP.NET MVC 3 Internationalization
  4. oracle ORA-00604和BadImageFormatException的解决方法
  5. jenkins无法安装插件问题
  6. word List 17
  7. yii mysql 主从_mysql主从同步实践 YII
  8. UIImageView 加入子UIImageView 导致内存泄露的问题
  9. MySQL外键约束详解
  10. 针对form表单赋值封装
  11. 线程间通信方式 java_深入理解JAVA多线程之线程间的通信方式
  12. MThings:ModbusTCP通讯调试调测工具助手
  13. Win10鼠标右键菜单不显示怎么办?
  14. 5月1日起入境新加坡可使用IATA通行证,五一假期新加坡亲子游攻略
  15. 研究生如何学习与科研的几点建议——来自一枚菜博的愚见
  16. EOS代码架构及分析(四)
  17. 华为使用计算机投屏要打开什么,华为Mate20手机怎么投屏到电脑上呢
  18. 音乐格式怎么转换,音频格式转换的方法
  19. 简单谈C++为什么是面向对象的程序设计
  20. Tomcat日志记录post请求参数

热门文章

  1. python中带附件发送电子邮件_python发送带附件邮件
  2. 谷歌发布android+8.2,谷歌Pixel 2代三款新机齐曝光:骁龙835+Android 8.0
  3. java 包装类方法总结_【源码】java包装类总结
  4. redisson的锁的类型_厉害了,中间件Redisson原来这么好用!
  5. python3语音识别模块_零基础教你玩转语音控制,学习语音控制技术,打造智能生活很简单...
  6. hadoop可以解决什么问题_快速解决皮带机轴磨损问题可以这样做
  7. mysql 并发 锁表_MySQL中的锁(表锁、行锁) 并发控制锁
  8. linux kill进程后黑屏,Linux中Kill进程的N种方法
  9. 图像二值化 php im2bw,图像二值化-MATLAB实现
  10. python3字符串拼接_Python3基础 str + 字符串变量拼接