高通android 7.0新建短信流程

原创 2017年09月13日 14:45:04
在短信列表,点击新建短信按钮,进入新建短信流程。
ConversationList.java

public void createNewMessage() {
        startActivity(ComposeMessageActivity.createIntent(this, 0));
    }
新建和打开已有的的区别是传递进去的threadId不一样,新建的threadId为0,也就是数据库中并没有记录。

ComposeMessageActivity.java
onCreate

Window window = ComposeMessageActivity.this.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
设置短信的系统bar,状态栏等的背景是透明的,所以最终效果是跟短信背景一体化。

initResourceRefs();初始化资源,里面具体内容读者自己查看,无非就是调用findViewById来获取控件

mBackgroundQueryHandler = new BackgroundQueryHandler(mContentResolver);这个是用来后台查询数据的

initialize(savedInstanceState, 0);初始化数据
我们主要来看initialize
mWorkingMessage = WorkingMessage.createEmpty(this);创建一个空的WorkingMessage,前面我们说过了,WorkingMessage表示一个正在编辑的短信

initActivityState(savedInstanceState);主要根据传递进来的Intent,来分析处理,对于新建短信,并没有什么需要加载的。后面分析

initMessageList();初始化短信历史列表

if (mConversation.getThreadId() <= 0//新建短信的threadId就是为0,所以走if分支
                && (!mConversation.isGroupChat() || mConversation.getGroupChat() == null)) {
            // Hide the recipients editor so the call to initRecipientsEditor won't get
            // short-circuited.
            hideRecipientEditor();//收件人编辑框只有在新建短信的场景下才会有
            initRecipientsEditor();//初始化收件人编辑框
            updateColorPalette(sPrimaryColorDark);
            setActionBarColor(sPrimaryColorDark);
        } else {
            hideRecipientEditor();
        }

updateSendButtonState();更新发送按钮状态,只有收件人和短信发送内容都有的情况下,且短信可用,默认短信,sim卡可用的情况下,发送按钮才会enable

drawTopPanel(false);//这里的topPanel,是我们添加彩信附件的时候,会在文字编辑框上面出现的区域
if (!mShouldLoadDraft) {//在initialize上面进行判断的,是否加载草稿,新建符合savedInstanceState == null条件,所以是不需要加载草稿
     // We're not loading a draft, so we can draw the bottom panel immediately.
     drawBottomPanel();//主要绘制文字编辑框所在区域,每次调用这个,都会根据当前短信实时状态来绘制。
}
updateTitle(mConversation.getRecipients());//更新标题


onStart
initFocus();初始化焦点
第一次进入短信会话详情界面,焦点主要处于两个地方,要么新建短信等有收件人编辑框的,会处于收件人编辑框,要么焦点会在文本编辑框
if (isRecipientsEditorVisible()) {
            mRecipientsEditor.addTextChangedListener(mRecipientsWatcher);
        }为收件人编辑框添加文本改变监听类,短信的各个状态都会因为收件人的输入删除而发送改变

registerReceiver(mHttpProgressReceiver, mHttpProgressFilter);
// Register a BroadcastReceiver to listen on SD card state.
registerReceiver(mMediaStateReceiver, getMediaStateFilter());
registerReceiver(mAirplaneModeBroadcastReceiver, mAirplaneModeFilter);
registerReceiver(mSimBroadcastReceiver, mSIMStatusChangeFilter);
注册各类广播

getWindow().setSoftInputMode(mode);软键盘相关

CharSequence text = mWorkingMessage.getText();//新建的话这里为null
        if (text != null) {
            mTextEditor.setTextKeepState(text);
        }
        if (!DEFER_LOADING_MESSAGES_AND_DRAFT) {
            loadMessagesAndDraft(1);
        } else {//我们会走else分支
            // HACK: force load messages+draft after max delay, if it's not already loaded.
            // this is to work around when coming out of sleep mode. WindowManager behaves
            // strangely and hides the keyboard when it should be shown, or sometimes initially
            // shows it when we want to hide it. In that case, we never get the onSizeChanged()
            // callback w/ keyboard shown, so we wouldn't know to load the messages+draft.
            mHandler.postDelayed(new Runnable() {
                public void run() {
                    loadMessagesAndDraft(2);//查询短信历史记录和草稿,我们新建短信查询后为空,所以这里就不说了,留着后面说
                }
            }, LOADING_MESSAGES_AND_DRAFT_MAX_DELAY_MS);
        }

onResume
没有特别需要看的。。。

所以其实新建是特别简单的流程,什么都是新的,涉及到的就是收件人编辑框。对于收件人编辑框,我后面会有一个专门的博客来进行说明。

Android7.0 Messaging源码分析(1) - 基础知识篇

关于 Messaging 有以下概念要了解:   SMS   短信息服务(英语:Short Message Service,缩写为SMS),中国大陆称短信,香港称短讯, 台湾、新加坡称简讯,是移动...
  • wenping1980
  • wenping1980
  • 2016年11月16日 10:07
  • 1409

Android短信Mms发送流程

短信的发送流程(framework) 一、主要文件 [plain] view plain copy /packages/apps/Mms/co...
  • wds1181977
  • wds1181977
  • 2016年07月07日 16:54
  • 1951

Android N 来电界面_接听_挂断_短信回复

本流程图基于MTK平台 Android 7.0,普通来电,本流程只作为沟通学习使用 本篇博客主要介绍在 AnswerFragment 上处理用户的三个操作,分别是 Answer(接听)、Decl...
  • meiliqiang
  • meiliqiang
  • 2017年11月10日 17:23
  • 95

Android短信发送流程之普通短信发送(原)

我们先来看最简单的流程入手分析,即收件人只有一个,而且不是长短信的情况。 一、地址有效性检测         当点击发送按钮时,触发onClick事件: [java]...
  • omnispace
  • omnispace
  • 2017年04月20日 15:31
  • 461

Android 短信发送流程

短信发送Framework流程,源代码的版本是4.4 1、通过Mms源代码可以知道短信发送最后调用的关键api如下: SmsSingleRecipientSender.java ...
  • gaojinshan
  • gaojinshan
  • 2015年04月07日 20:16
  • 2436

Android短信发送流程之普通短信发送(原)

我们先来看最简单的流程入手分析,即收件人只有一个,而且不是长短信的情况。 一、地址有效性检测         当点击发送按钮时,触发onClick事件: @ComposeMes...
  • u010961631
  • u010961631
  • 2015年12月12日 08:25
  • 3298

Android短信Mms接受流程

短信的接收流程应用层 1、源文件 这部分代码在packages/apps/Mms下,涉及的主要类: [plain] view plain copy com.android....
  • wds1181977
  • wds1181977
  • 2016年07月07日 16:56
  • 1393

Android Mms之:短信发送流程(图文详解)

本篇文章是对Android中的短信发送流程进行了详细的分析介绍,需要的朋友参考下信息的发送,对于Mms应用程序来讲主要就是在信息数据库中创建并维护一条信息记录,真正的发送过程交由底层(Framewor...
  • zhu929033262
  • zhu929033262
  • 2015年09月11日 17:31
  • 687

Android源码学习笔记1-短信发送流程分析

环境:Macbook pro (2.6 GHz Inter Core i5),操作系统为OS X 10.9.2。 一、准备工作 1.1、android4.4源码编译 下载android4.4源码...
  • u014633167
  • u014633167
  • 2014年04月11日 22:17
  • 2457

Android短信发送流程之长短信发送(原)

从前面《Android短信发送流程之普通短信发送》流程看到,长短信与普通短信的流程从SmsManager的sendMultipartTextMessage()方法开始区分,现在我们来看长短信的流程: ...
  • u010961631
  • u010961631
  • 2015年12月12日 08:41
  • 2297
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:高通android 7.0新建短信流程
举报原因:
原因补充:

(最多只允许输入30个字)