- 浏览: 33591 次
- 性别:
- 来自: 南京
-
最新评论
-
chunjuan0126:
你说打电话是OutgoingCallBroadcaster.j ...
android打电话实现分析 -
fancyup:
学习了!!!
android打电话实现分析
转自:http://gnibre.iteye.com/blog/705501
Android2.1消息应用(Messaging)源码学习笔记
我想首先应该从AndroidManifest.xml 文件开始,该文件是Android应用(APK)的打包清单,其中提供了关于这个应用程序的基本信息,如名称(application/@label),图标( application/@icon ),等常量信息,但该文件最重要的功能仍然是:向Android系统声明应用程序所包含的组件,包括Activity、Service、Receiver和ContentProvider,另外还会请求 系统 授予相关权限。
<application>是重要的标记,通常我们都是在此设置应用程序的名称和图标,而在Messaging这个应用中,它扩展了默认的android.app.Application类,在com.android.mms.MmsApp类中覆写了onCreate()方法进行系统初始化、覆写onTerminate() 方法做相关清理工作。最重要的是 <application>标记设置了(任务吸引力) taskAffinity =“android.task.mms”、allowTaskReparenting ="true" 这是两个与 Task有关的属性,那么何为任务(Task)呢?
A pplication就是一个.apk文件,由若干个组件(可能会包括 Activity、Service、Receiver 或者 ContentProvider )构成,它是一个物理上的独立存在。而Task则是指用户借助Application提供的功能完成某件事情,例如:发送一条信息给老朋友。通常一个Task操作所涉及的内容不会超过 A pplication边界 ,但在Android中却不是这样,Android允许一个Task操作 横跨多个Apllication。还以向老朋友发送信息为例,在该任务中,至少需要一个用来输入目标电话号码和消息内容的用户界面——即Android中的Activity组件(这是 Messaging应用中的内容 ),如果进一步要求目标号码是从联系人列表(或通话列表)中选择,而非手工输入,那么就涉及到跨 Apllication调用‘联系人应用’中的列表组件 了 (也是一个 Activity ) 。因此以上两个属性前者设置了 Activity的吸引力(Affinity)值,后者使得 Activity可以在不同的Task中自有切换。
Messaging中的Receiver
R eceiver广播 接收器用于响应系统中的各种广播事件并执行相关业务代码的组件,常用于完成如:启动service、显示Activity等 任务 。在Messagin应用中一共有7个 R eceiver:
1、.transaction.SmsReceiver : 短消息 广播 接收器,它负责处理与收到短消息相关的广播事件。触发该接收器运行的intent有两个:
A.android.intent.action.BOOT_COMPLETED--->Android系统启动完成时会发出该广播,即SmsReceiver会在系统启动完成时接收到调用;
B.com.android.mms.transaction.MESSAGE_SENT --->定义在 SmsReceiverService.java中的常量,被用在SmsMessageSender.sendMessage方法中——即短消息发送后 触发的广播事件;
完全和预想的一样,在 SmsReceiver中会启动 SmsReceiverService,启动代码在beginStartingService方法里。值得注意的是它同时还做了“屏幕唤醒锁定 (WakeLock)” 操作,最终在service启动完成后,通过回调用finishStartingService方法,解除了屏幕唤醒锁定。
SmsReceiver.java中有编译错误,因为无法访问android.provider.Telephony.Sms.Intents。其实 Intents 所在位置是:myeclair\frameworks\base\core\java\android\provider\Telephony.java,它被标记为@hide。
2、 . transaction.PrivilegedSmsReceiver :该接收器是SmsReceiver的子类,唯一的区别在于该Receiver被申明有permission为android.permission.BROADCAST_SMS。
3、.transaction.MmsSystemEventReceiver :Mms系统事件接收器,它负责 在收到新消息时 向通知区域(即标题栏)显示小图标,和 重新发送在发件箱中的MM。触发该接收器运行的两个Intent是:
A. android.intent.action.BOOT_COMPLETED ---> :与SmsReceiver中的情况相同;
B.android.intent.action.CONTENT_CHANGED ---> :连接方式改变时系统会发出该广播,即在连接方式变化,例如从gprs-->wifi时该接收器将被调用 ;
在MmsSystemEventReceiver类中,程序一旦获得数据连接时就会启动TransactionService服务;当连接方式改变时还会调用PduCache.purge()方法清理缓存;还有当系统刚刚启动时 会同步通知区域的图标、未读消息个数等信息。
MmsSystemEventReceiver.java中有编译错误,因为它无法访问以下类:
1、com.google.android.mms.util.PduCache:位置-myeclair\frameworks\base\core\java\com\google\android\mms\util\PduCache.java,该类未包含在默认的android.jar文件中,需要重新编译;
2、android.provider.Telephony.Mms: 位置- myeclair\frameworks\base\core\java\android\provider\Telephony.java,该类被标记为 @hide 。
3、com.android.internal.telephony.TelephonyIntents:位置-myeclair\frameworks\base\telephony\java\com\android\internal\telephony\TelephonyIntents.java,该类是一个常量类是未被开放的API。
4、com.android.internal.telephony.Phone: 位置- myeclair\frameworks\base\telephony\java\com\android\internal\telephony\Phone.java, 该类被标记为 @hide 。
4、.transaction.PushReceiver : WAP_PUSH 事件的广播接收器,该事件发生时 代表手机收到了一条新的WAP PUSH message。该接收器被调用后,首先唤醒手机屏幕5秒钟,然后在一个后台线程中处理push-data,将消息数据插入到数据库中,必要时启动 TransactionService服务以更新通知信息 。触发该接收器运行的 Intent是:
(intent.action=android.provider.Telephony.WAP_PUSH_RECEIVED, data=application/vnd.wap.mms-message),其中Action.Name定义在android.provider.Telephony类中。值得注意的是该Receiver有申明权限:android.permission.BROADCAST_WAP_PUSH,这意味着发出该广播时必须携带该授权,否则本 Receiver将不会被触发执行。
PushReceiver.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中。
5、. transaction.MessageStatusReceiver :消息状态改变时的广播接收器,消息状态改变是指消息的投递状态(即:是否成功送达、是否被目标用户阅读等)的变化,触发该接收器的Intent是:com.android.mms.transaction.MessageStatusReceiver. MESSAGE_STATUS_RECEIVED,该值是申明在MessageStatusReceiver.java文件中的常量。该广播事件是在SmsMessageSender.sendMessage()方法中被发出的,收到广播事件后,Receiver的会做两件事情:a-取得pdu数据包 更新消息状态(在updateMessageStatus方法中);b-更新通知区域的新消息指示信息 (在MessagingNotification.updateNewMessageIndicator()方法中)。
MessageStatusReceiver.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中。
6、.transaction.SimFullReceiver :Sim卡短信存储空间满的事件通知,当系统发现Sim卡中存储短信的空间耗尽时会发出该广播事件。该接收器完成的工作是在通知区域显示相关信息,点击通知信息后,可以进入管理Sim卡中短消息的Activity界面 。
SimFullReceiver.java中有编译错误,因为它无法访问 android.provider.Telephony 类,所在位置- myeclair\frameworks\base\core\java\android\provider\Telephony.java,该类被标记为 @hide 。
7、.transaction.SmsRejectedReceiver :短消息被拒绝时的事件接收器,当手机的存储空间不足时会拒绝接收新的短消息,当该事件发生时SmsRejectedReceiver被调用,它会检查确认是否是存储空间不足,然后在通知区域显示相关通知信息。
SmsRejectedReceiver.java中有编译错误,因为它无法访问 android.provider.Telephony 类,所在位置- myeclair\frameworks\base\core\java\android\provider\Telephony.java,该类被标记为 @hide 。
Messaging中的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()方法,结束与彩信中心的网络连接,并撤销屏幕点亮。
Android2.1消息应用(Messaging)源码学习笔记
我想首先应该从AndroidManifest.xml 文件开始,该文件是Android应用(APK)的打包清单,其中提供了关于这个应用程序的基本信息,如名称(application/@label),图标( application/@icon ),等常量信息,但该文件最重要的功能仍然是:向Android系统声明应用程序所包含的组件,包括Activity、Service、Receiver和ContentProvider,另外还会请求 系统 授予相关权限。
<application>是重要的标记,通常我们都是在此设置应用程序的名称和图标,而在Messaging这个应用中,它扩展了默认的android.app.Application类,在com.android.mms.MmsApp类中覆写了onCreate()方法进行系统初始化、覆写onTerminate() 方法做相关清理工作。最重要的是 <application>标记设置了(任务吸引力) taskAffinity =“android.task.mms”、allowTaskReparenting ="true" 这是两个与 Task有关的属性,那么何为任务(Task)呢?
A pplication就是一个.apk文件,由若干个组件(可能会包括 Activity、Service、Receiver 或者 ContentProvider )构成,它是一个物理上的独立存在。而Task则是指用户借助Application提供的功能完成某件事情,例如:发送一条信息给老朋友。通常一个Task操作所涉及的内容不会超过 A pplication边界 ,但在Android中却不是这样,Android允许一个Task操作 横跨多个Apllication。还以向老朋友发送信息为例,在该任务中,至少需要一个用来输入目标电话号码和消息内容的用户界面——即Android中的Activity组件(这是 Messaging应用中的内容 ),如果进一步要求目标号码是从联系人列表(或通话列表)中选择,而非手工输入,那么就涉及到跨 Apllication调用‘联系人应用’中的列表组件 了 (也是一个 Activity ) 。因此以上两个属性前者设置了 Activity的吸引力(Affinity)值,后者使得 Activity可以在不同的Task中自有切换。
Messaging中的Receiver
R eceiver广播 接收器用于响应系统中的各种广播事件并执行相关业务代码的组件,常用于完成如:启动service、显示Activity等 任务 。在Messagin应用中一共有7个 R eceiver:
1、.transaction.SmsReceiver : 短消息 广播 接收器,它负责处理与收到短消息相关的广播事件。触发该接收器运行的intent有两个:
A.android.intent.action.BOOT_COMPLETED--->Android系统启动完成时会发出该广播,即SmsReceiver会在系统启动完成时接收到调用;
B.com.android.mms.transaction.MESSAGE_SENT --->定义在 SmsReceiverService.java中的常量,被用在SmsMessageSender.sendMessage方法中——即短消息发送后 触发的广播事件;
完全和预想的一样,在 SmsReceiver中会启动 SmsReceiverService,启动代码在beginStartingService方法里。值得注意的是它同时还做了“屏幕唤醒锁定 (WakeLock)” 操作,最终在service启动完成后,通过回调用finishStartingService方法,解除了屏幕唤醒锁定。
SmsReceiver.java中有编译错误,因为无法访问android.provider.Telephony.Sms.Intents。其实 Intents 所在位置是:myeclair\frameworks\base\core\java\android\provider\Telephony.java,它被标记为@hide。
2、 . transaction.PrivilegedSmsReceiver :该接收器是SmsReceiver的子类,唯一的区别在于该Receiver被申明有permission为android.permission.BROADCAST_SMS。
3、.transaction.MmsSystemEventReceiver :Mms系统事件接收器,它负责 在收到新消息时 向通知区域(即标题栏)显示小图标,和 重新发送在发件箱中的MM。触发该接收器运行的两个Intent是:
A. android.intent.action.BOOT_COMPLETED ---> :与SmsReceiver中的情况相同;
B.android.intent.action.CONTENT_CHANGED ---> :连接方式改变时系统会发出该广播,即在连接方式变化,例如从gprs-->wifi时该接收器将被调用 ;
在MmsSystemEventReceiver类中,程序一旦获得数据连接时就会启动TransactionService服务;当连接方式改变时还会调用PduCache.purge()方法清理缓存;还有当系统刚刚启动时 会同步通知区域的图标、未读消息个数等信息。
MmsSystemEventReceiver.java中有编译错误,因为它无法访问以下类:
1、com.google.android.mms.util.PduCache:位置-myeclair\frameworks\base\core\java\com\google\android\mms\util\PduCache.java,该类未包含在默认的android.jar文件中,需要重新编译;
2、android.provider.Telephony.Mms: 位置- myeclair\frameworks\base\core\java\android\provider\Telephony.java,该类被标记为 @hide 。
3、com.android.internal.telephony.TelephonyIntents:位置-myeclair\frameworks\base\telephony\java\com\android\internal\telephony\TelephonyIntents.java,该类是一个常量类是未被开放的API。
4、com.android.internal.telephony.Phone: 位置- myeclair\frameworks\base\telephony\java\com\android\internal\telephony\Phone.java, 该类被标记为 @hide 。
4、.transaction.PushReceiver : WAP_PUSH 事件的广播接收器,该事件发生时 代表手机收到了一条新的WAP PUSH message。该接收器被调用后,首先唤醒手机屏幕5秒钟,然后在一个后台线程中处理push-data,将消息数据插入到数据库中,必要时启动 TransactionService服务以更新通知信息 。触发该接收器运行的 Intent是:
(intent.action=android.provider.Telephony.WAP_PUSH_RECEIVED, data=application/vnd.wap.mms-message),其中Action.Name定义在android.provider.Telephony类中。值得注意的是该Receiver有申明权限:android.permission.BROADCAST_WAP_PUSH,这意味着发出该广播时必须携带该授权,否则本 Receiver将不会被触发执行。
PushReceiver.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中。
5、. transaction.MessageStatusReceiver :消息状态改变时的广播接收器,消息状态改变是指消息的投递状态(即:是否成功送达、是否被目标用户阅读等)的变化,触发该接收器的Intent是:com.android.mms.transaction.MessageStatusReceiver. MESSAGE_STATUS_RECEIVED,该值是申明在MessageStatusReceiver.java文件中的常量。该广播事件是在SmsMessageSender.sendMessage()方法中被发出的,收到广播事件后,Receiver的会做两件事情:a-取得pdu数据包 更新消息状态(在updateMessageStatus方法中);b-更新通知区域的新消息指示信息 (在MessagingNotification.updateNewMessageIndicator()方法中)。
MessageStatusReceiver.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中。
6、.transaction.SimFullReceiver :Sim卡短信存储空间满的事件通知,当系统发现Sim卡中存储短信的空间耗尽时会发出该广播事件。该接收器完成的工作是在通知区域显示相关信息,点击通知信息后,可以进入管理Sim卡中短消息的Activity界面 。
SimFullReceiver.java中有编译错误,因为它无法访问 android.provider.Telephony 类,所在位置- myeclair\frameworks\base\core\java\android\provider\Telephony.java,该类被标记为 @hide 。
7、.transaction.SmsRejectedReceiver :短消息被拒绝时的事件接收器,当手机的存储空间不足时会拒绝接收新的短消息,当该事件发生时SmsRejectedReceiver被调用,它会检查确认是否是存储空间不足,然后在通知区域显示相关通知信息。
SmsRejectedReceiver.java中有编译错误,因为它无法访问 android.provider.Telephony 类,所在位置- myeclair\frameworks\base\core\java\android\provider\Telephony.java,该类被标记为 @hide 。
Messaging中的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()方法,结束与彩信中心的网络连接,并撤销屏幕点亮。
发表评论
-
获取Android SDK 源代码并在Eclipse中关联查看的方法--转
2012-04-16 08:57 1232在Google搜索“Android Eclipse 源代码”得 ... -
android 禁用屏蔽系统状态栏(statusbar) 转
2012-03-29 11:03 4533Object service = getSystemServi ... -
如何使Android应用程序获取系统权限(转)
2012-03-29 11:03 1281在 android 的API中有提供 ... -
LockScreen
2012-03-22 11:28 14111. 创建Service,注册Broadcast ... -
配置android jni开发环境
2012-03-22 11:27 1988以下是配置android jni开发环境的步骤。供参考。相关软 ... -
Android.mk写法
2012-03-22 11:26 928android编译系统的makefile文件Android.m ... -
windows 下 Android NDK开发配置(window + cygwin + NDK )转
2012-03-18 13:01 1309时间: 2011年6月11日 00:01 (星期六) ... -
Android中JNI编程的那些事儿
2011-10-12 17:19 873Android系统不允许一个纯粹使用C/C++的程序出现,它要 ... -
MMI Code Messages on Android
2011-08-30 11:12 1156MMI Code Messages on Android ... -
Android widget 之RemoteView
2011-08-25 17:23 10061.RemoteView概述 到目前为止,我发现Remote ... -
startManagingCursor
2011-08-25 16:10 1642总结一下Activity.startManagingCur ... -
[Android 数据库]一种典型的Content Provider 代码架构
2011-08-24 16:13 1932我们平时在做android开发的时候,一定经常会接触到数据库操 ... -
Android上dip、dp、px、sp等单位说明
2011-08-24 16:11 638[ dip: device independent pixel ... -
Android Activity的四种LaunchMode
2011-08-18 12:39 1017转自: http://dev.10086.cn/cmdn/wi ... -
Intents和Intent Filters(理论部分)
2011-08-17 15:51 762<转>http://www.cnblogs.com ... -
android打电话实现分析
2011-08-17 15:48 66601 OutgoingCallBroadcaster.java ... -
Android UI 界面绘制原理分析
2011-08-17 14:43 2807View类包含Surface(变量� ...
相关推荐
物联网操作系统_RT-Thread_DWIN串口屏幕开发库__1741163229.zip
本书《Advanced Metaprogramming in Classic C++》旨在为读者提供C++模板元编程(TMP)的全面介绍和参考。作者Davide Di Gennaro深入探讨了TMP作为一种技术集合,它能为C++带来新的编程风格,使代码变得异常清晰和高效。书中不仅涵盖了语言层面的内容,还包括设计模式、示例和应用案例研究。特别强调了小而可重用的技术,这些技术将提升日常工作的质量。本书的亮点在于作者对涉及概念的深刻理解,不仅仅是对元编程的机械式概述。读者将通过实际示例学习如何使用元函数、lambda表达式等新元素为代码增添风味,并通过作者坦率的解释进行实践。本书要求读者思考、学习并理解语言,以便能够以更高层次进行编程。
基于OpenCV和Scikit图像进行液滴分布分析的方法
基于comsol的三维电化学-热-应力耦合锂离子电池模型:全尺度计算三场耦合效应,输出电信号、温度及应力分布与电池瞬态位移情况,Comsol三维电化学-热-应力耦合模型:全尺度计算三场耦合效应,输出电信号、温度分布及应力瞬态分析,comsol三维电化学-热-应力耦合锂离子电池模型 全尺度计算三场耦合 可以输出电信号,温度分布情况以及应力分布情况和电池瞬态位移情况 ,核心关键词:comsol三维电化学;热应力耦合锂离子电池模型;全尺度计算;三场耦合;输出电信号;温度分布;应力分布;电池瞬态位移。,《全尺度计算下的电池耦合效应分析》
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
基于有效磁链的电压电流混合模型无传感器控制技术:提高低速观测精度,实现闭环控制,基于电压电流混合模型的低速无传感器控制策略研究——有效磁链观测器性能优化与实现,该模型基于有效磁链进行无传感器控制,为了改善磁链观测器的低速性能,提高低速下观测精度,使用电压电流混合模型,其运行原理为:使用电压模型获取定子磁链,经过有效磁链转化后得到转子磁链,通 过反正切计算得到估计角度值。 将电压模型所得的定子磁链以及估计角度值作为电流模型的输 入,先经过 Park 计算得到 dq 轴的磁链,可根据磁链公式计算出 dq 轴的电流,再由 Park 逆变 获取估计的定子电流 。 定子电流的误差经过 PI 调节后,反馈至电压模型的输入信号 中,实现完整的闭环控制。 ,核心关键词: 1. 磁链观测器 2. 电压电流混合模型 3. 电压模型 4. 定子磁链 5. 估计角度值 6. 电流模型 7. Park 计算 8. dq轴的磁链 9. PI调节 10. 闭环控制 以上关键词用分号分隔为:磁链观测器;电压电流混合模型;电压模型;定子磁链;估计角度值;电流模型;Park计算;dq轴的磁链;PI调节;闭环控制;,基
Lamb波驱动的无损检测技术:双曲线成像算法的实践与应用,Lamb波驱动的无损检测技术:双曲线成像算法的实践与应用,Lamb波,无损检测,双曲线成像算法 ,Lamb波; 无损检测; 双曲线成像算法; 机械波成像。,Lamb波双曲线成像算法无损检测技术
LLC谐振变换器恒压恒流双竞争闭环仿真研究(附参数详解与算法思路参考),LLC谐振变换器恒压恒流双竞争闭环仿真研究(附参数详解与文献思路参考),LLC谐振变器恒压恒流双竞争闭环simulink仿真(附说明文档) 1.采用电压电流双环竞争控制(恒压恒流) 2.附双环竞争仿真文件(内含仿真介绍,波形分析,增益曲线计算.m代码) 仿真参数: 输入Vin=325V,输出电压Vo=20V,谐振电感Lr=20uH,谐振电容Cr=88nF,励磁电感Lm=66uH,变压器匝比n=13,额定功率P=2kW 参考文献:《基于半桥谐振变器的控制策略研究》不是复现,就是参考这篇文献的双竞争闭环算法的思路搭建的,控制上是一样 ,LLC谐振变换器; 恒压恒流双竞争闭环; 仿真参数; 半桥谐振变换器控制策略; 增益曲线计算; 波形分析。,LLC谐振变换器双环控制策略的Simulink仿真研究
奇美_G080Y1-T01 ver0.0
无线电能传输技术探讨:基于LCL-LCL补偿拓扑的WPT与无线充电电路设计,参数详解及仿真模型附资料库。,无线电能传输系统:基于LCL-LCL补偿拓扑的WPT与无线充电PSPICE Cadence仿真模型参数解析,无线电能传输(WPT),无线充电,pspice Cadence仿真模型,LCL-LCL补偿拓扑 电路参数: 直流电压100V,谐振频率20kHz,耦合系数0.347,负载30Ω,输出功率1.24kW(可自行调整) (说明: 模型附带说明文档和部分波形图,资料仅供个人使用) ,无线电能传输; 无线充电; pspice; 仿真模型; LCL-LCL补偿拓扑; 电路参数; 直流电压; 谐振频率; 耦合系数; 负载; 输出功率,无线充电系统仿真模型:LCL-LCL补偿拓扑,Cadence pspice电路参数分析
物联网数据采集_SpringBoot_MyBatis_Red_1741164364.zip
电商即时聊天系统_MallChat_抹茶_1741162404
基于标准IEEE 33节点配电网的Simulink建模:有参考文献及数据来源,可输出节点电压电流数据用于潮流计算与风光并网研究,基于标准IEEE 33节点配电网的Simulink建模:数据驱动的潮流计算与风光并网研究,标准IEEE33节点配电网, simulink建模,有参考文献,有数据来源。 可输出节点电压、电流数据,适用于潮流计算,在此基础上可实现风光并网研究。 ,核心关键词:标准IEEE33节点配电网; Simulink建模; 参考文獻; 数据来源; 输出节点电压电流数据; 潮流计算; 风光并网研究。,IEEE33节点配电网Simulink建模:数据驱动的潮流计算与风光并网研究
移植VC Boot协议栈到MCU上,移植VC Boot协议栈至MCU,集成UDS DoCAN协议栈,构建包含App、Boot及上位机工程的完整解决方案,移植vc的boot协议栈到mcu上,集成了UDS DoCAN的协议栈。 包括app,boot和上位机工程 ,移植VC的Boot协议栈; MCU集成; UDS DoCAN协议栈; App集成; Boot集成; 上位机工程,移植VC协议栈至MCU,集成UDS DoCAN,涵盖app、boot及上位机工程
探索双向Buck-Boost升降压斩波电路:滑模控制下的CUK电路模型及单相半桥非隔离形式的开闭环策略,基于滑模控制的双向Buck-Boost升降压斩波电路及其Cuk电路的Matlab Simulink模型研究:开环闭环策略下的隔离与非隔离双向电路设计,滑模控制双向Buck_Boost升降压斩波电路,cuk电路,开环闭环,matlab simulink模型,隔离,非隔离双向Buck~Boost电路,采用单相半桥形式,电流内环,电压外环 ,滑模控制; Buck_Boost电路; 升降压斩波电路; CUK电路; 双向电流电压环; MATLAB Simulink模型; 隔离与非隔离; 单相半桥形式,滑模控制Cuk电路与Buck-Boost升降压电路的Matlab Simulink建模研究
物联网实战项目
深入探究Prius2004永磁同步电机设计:磁路法、maxwell有限元法、MotorCAD温仿真、应力分析,Prius 2004永磁同步电机设计详解:从设计程序到建模仿真与温升分析,Prius2004永磁同步电机设计报告: 磁路法、maxwell有限元法、MotorCAD温仿真、应力分析。 (内容比较完善,用于很需要的朋友,不支持讲解,等额外服务哈。 ) 内容:: 1.Excell设计程序,可以了解这个电机是怎么设计出来的,已知功率转矩等,计算电机的体积,叠厚,匝数等。 2.Maxwell参数化仿真模型:可以学习参数化仿真模型,有限元结果可查看。 3. 橡树岭拆解和实测数据:官方的实测数据和差拆解报告。 4.maxwell prius2004建模仿真教程等:ppt资料一步一步教学怎么去建模 5.温升仿真分析,提供motor cad模型 ,磁路法; maxwell有限元法; MotorCAD温仿真; 应力分析; Excell设计程序; Maxwell参数化仿真模型; 橡树岭拆解实测数据; maxwell prius2004建模仿真教程; 温升仿真分析; motor cad模型,Priu
2023-04-06-项目笔记-第四百三十阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.428局变量的作用域_428- 2025-03-07
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
WOA-LightGBM算法:基于鲸鱼优化算法的LightGBM多变量回归预测Matlab程序包,基于WOA-LightGBM的自动化参数寻优多变量回归预测系统:Matlab程序集成,支持多输入单输出与时间序列预测,WOA-LightGBM基于鲸鱼算法优化LightGBM的多变量回归预测 Matlab语言 程序已调试好,无需更改代码直接替Excel运行 多输入单输出,回归预测也可以前加好友成时间序列单列或分类预测,回归效果如图1所示 图很多,可输出特征重要性图,完全满足您的需求 利用WOA算法对LightGBM的参数进行自动化寻优,优化的参数为:叶子数、学习率、最大迭代次数~ 也可前加好友替其他任意优化算法(如蜣螂DBO、冠豪猪CPO等等) 注: 1.附赠测试数据,数据格式如图2所示~ 2.注释清晰,适合新手小白运行main文件一键出图~ 3.仅包含Matlab代码,后可保证原始程序运行 4.模型只是提供一个衡量数据集精度的方法,因此无法保证替数据就一定得到您满意的结果~ ,关键词提取: 1. WOA-LightGBM; 2. 鲸鱼算法优化; 3. LightGBM; 4. 多