彩信相关文件,彩信业务流程

2024-03-30 21:08
文章标签 相关 业务流程 彩信

本文主要是介绍彩信相关文件,彩信业务流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


MMS中的Activity

Activity是用来构建UI(用户界面)的组件,用户操作界面代表了应用程序提供的基本功能,是应用程序和用户之间的交互接口。在Messaging应用中有以下的Activity:
  1、.ui.ConversationList,对话列表界面,这是进入应用程序的主界面。它有两个配置属性值得我们特别注意,a.android:configChanges="orientation|keyboardHidden":在Android系统中,当程序所运行的环境(如:屏幕方向、键盘状态、字体等级,等等)发生变化后 会导致Activity被重新启动(以适应环境变化),然而Activity也可以宣称自己来应付某些变化(而不是一股脑地全让系统重启自己),configChanges属性正是用于指定自己愿意应付的变化情况。此处该属性有两个值,orientation代表屏幕方向发生改变,keyboardHidden表示键盘可访问状态发生变化(即键盘弹出/收起),这意味着当屏幕方向和键盘可用状态发生变化时, Activity不会被重新启动,而是调用其onConfigurationChanged方法,通常是在该方法中对自己做出调整,以适应变化;b.launchMode="singleTop":该属性指示了Activity的加载模式,这与Activity在不同Task之间的重用有关,该属性共有4个可用选项standard, singleTop,singleTask,singleInstance,它们将与Intent中的FLAG_ACTIVITY_* 标记常量协同产生相关作用。
ConversationList类中定义了程序中涉及到的选项菜单、会话(Conversation)项上的上下文菜单等UI元素。另外该类中的runOneTimeStorageLimitCheckForLegacyMessages方法用于检测存储空间限制。
SmsRejectedReceiver.java中有编译错误,因为它无法访问以下类:
1.android.provider.Telephony类,所在位置-myeclair\frameworks\base\core\java\android\provider\Telephony.java,该类被标记为@hide 。
2.com.google.android.mms.*:位置-myeclair\frameworks\base\core\java\com\google\android\mms\*,这些类未包括在公开的API中。
  
  
  2、.ui.ComposeMessageActivity,创建新消息的用户界面,通过选项菜单menu_compose_new会调用到该界面。这是个很庞大的类,内部实现也很复杂,等仔细看了再写补充吧。
ComposeMessageActivity.java中有编译错误,因为它无法访问以下类:
1.com.android.internal.widget.ContactHeaderWidget类,所在位置-myeclair\frameworks\base\core\java\com\android\internal\widget\ContactHeaderWidget.java,该类被标记为@hide 。
2.com.android.internal.telephony.*类,所在位置-myeclair\frameworks\base\telephony\java\com\android\internal\telephony\*,这些类未包括在公开的API中。
3.com.google.android.mms.*:位置-myeclair\frameworks\base\core\java\com\google\android\mms\*,这些类未包括在公开的API中。
  
  3、.ui.ForwardMessageActivity,用于转发消息的Activity,这是ComposeMessageActivity的别名,用于把一条现有消息的内容带到创建消息的界面上;
  
  
  4、.ui.DeliveryReportActivity,投递报告Activity,用于报告消息的投递状态,它采用对话框风格的主题(android:theme="@android:style/Theme.Dialog")。
DeliveryReportActivity.java中有编译错误,因为它无法访问以下类:
1.com.google.android.mms.*:位置-myeclair\frameworks\base\core\java\com\google\android\mms\*,这些类未包括在公开的API中。
2.android.provider.Telephony类,所在位置-myeclair\frameworks\base\core\java\android\provider\Telephony.java,该类被标记为@hide 。
  
  5、.ui.WarnOfStorageLimitsActivity,存储空间限制警告,用于告知用户 关于存储空间限制的设置信息。
WarnOfStorageLimitsActivity.java中有编译错误,因为它无法访问以下类:
1. com.android.internal.app.AlertActivity类,位置-myeclair\frameworks\base\core\java\com\android\internal\app\AlertActivity.java,该类未包括在公开的API中。
2. com.android.internal.app.AlertController类,位置-myeclair\frameworks\base\core\java\com\android\internal\app\AlertController.java,该类未包括在公开的API中。
  
  6.ui.ConfirmRateLimitActivity,发送多条彩信时向用户提示确认的界面,它包括了自动应答操作——即用户超过一段时间未作出响应时自动取消发送。
  
  7、.ui.ClassZeroActivity,ClassZero是一种特殊的短消息类型,它会直接显示在用户屏幕上并等待用户操作。ClassZeroActivity正是用来显示此类型的短信消息,并运行用户将信息保存起来。
ClassZeroActivity.java中有编译错误,因为它无法访问以下类:
1.android.provider.Telephony类,所在位置-myeclair\frameworks\base\core\java\android\provider\Telephony.java,该类被标记为@hide 。
2.com.google.android.mms.util.SqliteWrapper:位置-myeclair\frameworks\base\core\java\com\google\android\mms\util\SqliteWrapper.java,该类未包括在公开的API中。
  
  8、.ui.MessagingPreferenceActivity,这是Messaging应用的系统配置界面,其中有针对SMS、MMS、存储限制等配置属性,以及管理存储在SIM卡中的短信消息。该Activity启动时会检查当前是否有SIM,以及是否支持MMS来动态调整配置项列表。
MessagingPreferenceActivity.java中有编译错误,因为它无法访问TelephonyManager.getDefault()方法,可以考虑使用Context.getSystemService(Context.TELEPHONY_SERVICE)方法来得到类实例。
  
  9、.ui.ManageSimMessages,用于管理Sim卡中短消息的界面,它以列表的形式显示了存储在SIM卡中的短消息,并允许用户将信息转存到手机内存中,或者删除消息。
ManageSimMessages.java中有编译错误,因为它无法访问以下类:
1.android.provider.Telephony类,所在位置-myeclair\frameworks\base\core\java\android\provider\Telephony.java,该类被标记为@hide 。
2.com.google.android.mms.util.SqliteWrapper:位置-myeclair\frameworks\base\core\java\com\google\android\mms\util\SqliteWrapper.java,该类未包括在公开的API中。
  
  10、.ui.SearchActivity,用于信息搜索的操作界面。Android通过系统服务Context. SEARCH_SERVICE(即SearchManager类)提供了强大的信息搜索功能。在该应用中通过对联系人(或者电话号码)、主题等信息的匹配来搜索信息,并将结果显示在一个列表中。
SearchActivity.java中有编译错误,因为它无法访问以下类:
1.android.provider.Telephony类,所在位置-myeclair\frameworks\base\core\java\android\provider\Telephony.java,该类被标记为@hide 。
  
  11、.ui.SlideshowEditActivity,所谓Slide是指MM中的一页内容 即一帧,通常被称为幻灯片。SlideshowEditActivity是彩信中所有内容(即多个Slide)的列表,用户可以选定列表项进入Slide播放/修改界面。
SlideshowEditActivity.java中有编译错误,因为它无法访问以下类:
1.com.google.android.mms.*:位置-myeclair\frameworks\base\core\java\com\google\android\mms\*,这些类未包括在公开的API中。
  
  
  12、.ui.SlideshowActivity,用于播放Slide幻灯片的界面,它会在全屏状态下显示幻灯片的内容。
SlideshowActivity.java中有编译错误,因为它无法访问以下类:
1.com.google.android.mms.*:位置-myeclair\frameworks\base\core\java\com\google\android\mms\*,这些类未包括在公开的API中。
  
  13、.ui.SlideEditorActivity,用于编辑Slide幻灯片内容的操作界面,它提供了:添加、移除 文本/图片/音乐,以及Slide等功能。
SlideEditorActivity.java中有编译错误,因为它无法访问以下类:
1.com.google.android.mms.*:位置-myeclair\frameworks\base\core\java\com\google\android\mms\*,这些类未包括在公开的API中。
  
  14、.ui.EditSlideDurationActivity,用于修改Slide幻灯片持续显示时间的操作界面,默认持续显示时间是5秒。
EditSlideDurationActivity.java编译无错误。
  
  Messaging中的Service

应用中共有两个service:.transaction.TransactionService.transaction.SmsReceiverService,前者负责处理与彩信(MMS)相关的网络业务,后者是短消息(SMS)的接收器,两者都会响应来自通讯网络的通知并收取信息。它们只用于本应用内部(因为其未声明任何intent-filter),上文介绍的广播接收器中有显式启动它们的代码。以下我们将分别分析两个Service的基本实现。
  
  1、.transaction.SmsReceiverService,它被创建时首先初始化了新的工作线程(HandlerThread对象)用来在后台完成相关动作,紧接着在onStartCommand方法里会将具体的任务通过消息(即调用service的Intent)发送给工作线程进行处理。根据Intent.Action的名称,工作线程会处理4中情况:
A.系统启动完成后BOOT_COMPLETED:把发件箱(outbox)中的消息移动到发送队列(QueuedBox),然后开始发送队列中的消息,最后调用updateNewMessageIndicator方法更新状态栏消息指示图标;
B.处理Sms接收handleSmsReceived:从Intent中取得消息对象,直接显示给用户(Class0类型)或者保持到数据库中。
C.处理Sms发送handleSmsSent:从待发送消息队列中取得消息,并按次序逐个发送;
D.处理通讯网络状态改变handleServiceStateChanged:用户从无信号状态进入有信息号状态后,继续执行发送任务的情况;
  
  2、.transaction.TransactionService,是处理与彩信相关业务的服务组件,根据代码中的注释可以了解到:收发彩信时可以是移动数据网络(mobile data network)或Wi-Fi网络。当没有可用的移动数据网络连接时,会尝试通过Wi-Fi网络发送/接收MMS信息(如果有Wi-Fi网络的话)。
它同样在onCreate方法里首先创建了后台工作线程,通过NetworkConnectivityListener类(一个被@hide的类)监听通讯网络链接状态的变化,并根据不同的链接状态作出相应的反应。
紧接着就是onStartCommand方法了,它首先会检测当前的网络连接状态,然后分别完成以下几件事情:
A.针对收发彩信的业务,它将intent.getExtras()包装成一个DTO—— TransactionBundle,再通过launchTransaction()方法将具体工作交给后台工作线程去处理。
B.如果intent.getExtras()为Null时,它会尝试从数据库中扫描是否有(上次系统结束时)未完成的操作,如果有则遍历所有操作项,逐个调用launchTransaction()方法,以完成操作;
  
  
重点还是在后台工作线程的处理逻辑上,在代码中表现为handleMessage方法,它共处理以下几种不同类型的业务消息:
  
  Ⅰ.EVENT_CONTINUE_MMS_CONNECTIVITY,与彩信系统建立网络连接,它首先会检查当前是否有待处理的业务,然后通过调用beginMmsConnectivity方法来创建于彩信系统的网络连接,如果网络连接被正确建立,那么它会通过一个30秒间隔的计时器来维持连接的持续存在;
  
  Ⅱ.EVENT_DATA_STATE_CHANGED,网络连接状态发生改变分支,这一分支是通过对NetworkConnectivityListener对象的监听而获得回调。在该分支中首先确认了网络连接的有效性,(代码在此处仅允许ConnectivityManager.TYPE_MOBILE_MMS类型那么wi-fi连接属于该类型?),然后创建TransactionSettings对象,并调用processPendingTransaction方法处理具体的彩信业务;
  
  Ⅲ.EVENT_TRANSACTION_REQUEST,这是对具体彩信业务的处理分支,它首先创建了承载业务参数的TransactionSettings对象,该对象包含有彩信中心服务地址(mmscUrl)、代理服务器地址和端口等用于建立网络连接的参数,然后根据不同的业务类型,分别进行处理。当前仅明确处理了以下4中业务:
1、NOTIFICATION_TRANSACTION,通过一条Push数据,通知手机端收到有新信息;
2、RETRIEVE_TRANSACTION,收取彩信;
3、SEND_TRANSACTION,发送彩信;
4、READREC_TRANSACTION,彩信阅读报告;
用于处理具体业务的关键代码在processTransaction方法中,它首先检查业务是否已存在于处理队列中(mProcessing & mPending),然后调用beginMmsConnectivity()方法确认网络连接有效性,并点亮终端屏幕,然后将业务对象条件到处理队列中并向业务附加观察者,最后调用业务自身process()方法完成网络通信。注意:业务的process方法被调用又会触发观察者(即当前service)的update方法被调用,这使得刚才被处理掉的业务从队列中被移除,并且开始处理下一条业务;
  
  
  Ⅴ.EVENT_HANDLE_NEXT_PENDING_TRANSACTION,这是一个多条彩信业务能够被连续处理的关键分支,首先在当前service中有mProcessing数组列表用于缓存连续的彩信业务,每条彩信业务是一个可被观察的对象(注:观察者模式),当前service是唯一观察者,其会感知到一条业务已处理结束,并触发下一条业务处理的开始;
  
所有彩信业务处理完成后,会调用service中的endMmsConnectivity()方法,结束与彩信中心的网络连接,并撤销屏幕点亮。

这篇关于彩信相关文件,彩信业务流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/862582

相关文章

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10

Node Linux相关安装

下载经编译好的文件cd /optwget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gztar -xvf node-v10.15.3-linux-x64.tar.gzln -s /opt/node-v10.15.3-linux-x64/bin/npm /usr/local/bin/ln -s /opt/nod

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

rtmp流媒体编程相关整理2013(crtmpserver,rtmpdump,x264,faac)

转自:http://blog.163.com/zhujiatc@126/blog/static/1834638201392335213119/ 相关资料在线版(不定时更新,其实也不会很多,也许一两个月也不会改) http://www.zhujiatc.esy.es/crtmpserver/index.htm 去年在这进行rtmp相关整理,其实内容早有了,只是整理一下看着方

枚举相关知识点

1.是用户定义的数据类型,为一组相关的常量赋予有意义的名字。 2.enum常量本身带有类型信息,即Weekday.SUN类型是Weekday,编译器会自动检查出类型错误,在编译期间可检查错误。 3.enum定义的枚举类有什么特点。         a.定义的enum类型总是继承自java.lang.Enum,且不能被继承,因为enum被编译器编译为final修饰的类。         b.只能定义

java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频) 停车管理信息系统是为了提升停车场的运营效率和管理水平而设计的综合性平台。系统涵盖用户信息管理、车位管理、收费管理、违规车辆处理等多个功能模块,旨在实现对停车场资源的高效配置和实时监控。此外,系统还提供了资讯管理和统计查询功能,帮助管理者及时发布信息并进行数据分析,为停车场的科学

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数(开口向下),如下: 因为要使得其存在正解,必须满足,那么。 上述函数的最优结果为:,。 对应的mathematica代码如下: Clear["Global`*"]f0[x_, a_, b_, c_, d_] := (a*x - b)*(d - c*x);(*(b c+a d)/(2 a c)*)Maximize[{f0[x, a, b,