这几天虽说偶遇瓶颈。但也渐入佳境。因为之前没有接触过android,所以作为一个新手不会给自己过高的要求。相比于去年做的分布式资源检索,今年的移动开发着实要简单一些。尽管其本质没有太大的差别,但从用户体验方面来说更能激发每一位学习者的兴趣,这可能就是android的魅力所在吧...

前天做的“电话拨号器”,最后载入到模拟器的时候不知道哪里出了错,系统总是自己主动关闭,恼羞成怒也就没再搭理它。昨天又做了“短信发送器”,也遇到了和前者相似的问题,只是最后经过调试算是研制成功了吧。因此调整了前者,同样的解决方式。外瑞古德~~~那接下来就以“短信发送器”为例谈谈自己的一些学习心得吧...

首先上图一张:

咱先来说说这个短信发送器的基本构造,大家从上图也可看出,其大体可分为五部分。事实上也就是两条提示+两个输入框,另一个发送button。那么这五部分是怎么出来的,先来看一小段代码:

<EditText
android:id="@+id/et_word"
android:lines="5"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv_ism"
android:layout_centerVertical="true"
android:inputType="textMultiLine" >
</EditText>

这块代码是定义短信输入框的,最上边的"@+id/et_word”是在R.java文件里加入一个名为et_word的id,也就是声明了我们这个输入框。lines=“5”规定了这个输入框为五行,这个长度一般能够满足我们的需求;而下边的四个layout属性定义了这个文本框的长宽和相对位置,其属性值大家能够好好了解一下。都非常有意思,当中第三个的意思是文本框的位置在id为tv_ism的下方,而tv_ism便是我们所示“请输入短信内容”;最后定义了短信输入框的类型。其它几块内容都和其类似,当然还有非常多的属性,大家能够查看其API了解一下。

UI设计的相对简陋,还望大家多多包涵。接下来就是赋予其对应的功能了,再上代码一大块:

public class MainActivity extends Activity implements OnClickListener {

	private EditText et_word;
private EditText et_number;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_number=(EditText)findViewById(R.id.et_number);
et_word=(EditText)findViewById(R.id.et_word);
Button bt_sent=(Button)findViewById(R.id.bt_sent);
bt_sent.setOnClickListener(this);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_sent:
String word=et_word.getText().toString().trim();
String number=et_number.getText().toString().trim();
if(TextUtils.isEmpty(word)||TextUtils.isEmpty(number)){
Toast.makeText(this, "电话号码或者短信内容不能为空", Toast.LENGTH_SHORT).show();
return;
}else{
SmsManager smsManager=SmsManager.getDefault();
ArrayList<String> words=smsManager.divideMessage(word);
for(String str:words){
smsManager.sendTextMessage(number, null, str, null, null);
}
}
break;
} }
}

我们先从实际出发。要想使短信发送器可以发送短信。首先要找到发送button,但我们点击button时,系统会找到短信内容和想要发送的号码,然后实现其功能,大体上也就是分为这三步。

于是乎我们先找到button:Button bt_sent=(Button)findViewById(R.id.bt_sent); bt_sent.setOnClickListener(this);这里边涉及了几个经常使用的方法,大家看其表面意思也能了解,先通过id找到button,然后调用其方法设定点击事件。下边的onClick(View  v)为接口OnClickListener的实现方法。当的得到的id为R.id.bt_sent时运行一系列的操作;上边的et_number、et_word和bt_sent是一样的,先通过id找到他们。然后利用他们自身的方法提取电话号码和短信内容;接下来就是推断电话号码或者短信内容是否为空,相信大家都有这种常识,二者有一方为空则不能发送短信。关于Toast大家能够去查一查,翻译成中文为“吐丝面包”。它主要是给用户一个提示。它调用的方法有三个參数,这个一開始不大好理解,只是通过该例大家也能猜出它的大概意思,当中第三个參数为显示时长,最后不要忘了调用Toast的show()返回值。假设号码或内容不为空的话那就运行else里的语句,提取短信内容,假设发送内容过长,超过规定的70个汉字或者160个字符便对其进行分段。这时要用到ArrayList<String>
words=smsManager.divideMessage(word);然后对其进行遍历,smsManager.sendTextMessage(number, null, str, null, null);这里边有五个參数,第一个为要发送的联系人电话号码;第二个为短信来自哪里,如今我国的执行商不支持这个功能;第三个为发送的短信内容;第四个參数负责报告短信是否发送成功;第五个为是否发送送达报告。这个如今先不用管,都可设为null。

还须要注意的一点就是SmsManager smsManager=SmsManager.getDefault();这条语句,它之前默认导入的包已经过期,所以须要导入新的包。这个到时候会有提示。

         ok,这样一个简易的短信发送器便搭建完毕了。启动两个模拟器便可进行实验,就如上图所看到的,发送短文本和长文本的差别也一目了然。今天将继续深入了解四种布局。UI时代到来,敬请期待……

Android从无知到有知——NO.2的更多相关文章

  1. Android从无知到有知——NO.7

    的ip拨号器在监听外拨电话时用的是系统提供的广播事件.而有些时候我们须要自己设定广播事件来满足特定的须要. Ok,今天整一下自己定义广播事件,我们用一个状态监測模块向一个3G模块发送报警信息来实现这一 ...

  2. Android从无知到有知——NO.1

    如期而至的软件设计大赛吹响了重生的号角.正如同我们的指导老师所说,这个暑假会影响你近几年的发展,也可能会决定你以后所走的道路. 是的.我身边就有非常好的样例,有些师哥师姐们常常跟我们说.软件大赛不仅使 ...

  3. Android从无知到有知——NO.3

    昨天看了下几种常见的布局,类似于曾经学的html.关于css+div没有接触太多,但这几种布局都比較简单.仅仅要逻辑没有太大问题就能整出来. 相对布局是我们平时默认的布局,也是最经常使用的.前边做的& ...

  4. Android从无知到有知——NO.5

    今天整一下利用广播实现ip拨号. 这一块主要用到的知识是android四大组件之中的一个的broadcast   receiver(广播接收者).那么它接收什么东东呢,就是我们所无谓的一个个的事件,比 ...

  5. Android从无知到有知——NO.6

    紧随上一篇,说一下创建ip拨号器过程中出现的一些问题. 1)在一開始监听外拨电话的时候会报这样一个警告: Permission Denial: receiving Intent { act=andro ...

  6. Android从无知到有知——NO.4

    因为我们做的是手机安全卫士,因此,我们需要一个地图定位功能,些相关的项目,也有一些教程.到百度官方下载了相关的jar包和API,但自己建项目的时候却不是那么顺利,bug不断,弄得心烦意乱,最后最终臣服 ...

  7. Android仿今日头条和知乎等App顶部滑动导航实现代码分析及源码下载

    一.本文所涉及到的知识点 源码下载 二.目标 通过利用ViewPager+FragmentStatePagerAdapter+TabLayout 实现顶部滑动效果,如图: 三.知识点讲解 1.View ...

  8. Docker学习-从无知到有知的学习过程

    Docker学习 最近被别人提到的docker吸引到了注意力,所以打算先快速的了解一下docker到底是个上面东西. 之所以我写下这个文档呢,是为了记录对docker一无所知我是如何进行学习一门新技术 ...

  9. Android 程序员必须知道的 53 个知识点

    1. android 单实例运行方法 我们都知道 Android 平台没有任务管理器,而内部 App 维护者一个 Activity history stack 来实现窗口显示和销毁,对于常规从快捷方式 ...

随机推荐

  1. 将内存图像数据封装成QImage V2

    转:http://www.cnblogs.com/bibei1234/p/3161555.html 如何将内存图像数据封装成QImage 当采用Qt开发相机数据采集软件时,势必会遇到采集内存图像并进行 ...

  2. 使用FlashPaper在线转换.doc为.swf_实用技巧

    https://yq.aliyun.com/ziliao/160044?spm=5176.8246799.0.0.JBbqjY 摘要: 本文讲的是使用FlashPaper在线转换.doc为.swf_实 ...

  3. 2017年浙江工业大学大学生程序设计迎新赛预赛 H - 栗酱的文明

    题目描述         “伟大的勇士兔栽栗女王,所有栗子看到您都不寒而栗,但也非常尊重您.您骑着威风凛凛的小白兔,带领兔栽栗们奋勇前行.伟大史诗告诉我们,烈兔勇栗从大草原飞奔出来,冲在每场战争的前线 ...

  4. js中箭头函数和普通函数this的区别

    最近在学习angularJs的时候由于里面涉及到了箭头函数,箭头函数除了声明上有点区别以外,和普通函数最主要的区别还是在this的问题上. Js中函数中嵌套的函数this不会 “继承”.比如说以下代码 ...

  5. snort安装--daq,dnet---ERROR! dnet header not found, go get it from...等错误解决方案

    snort源码安装过程中,需要安装daq,dnet.这里想说下如何进行安装.daq简单,源码下载直接安装就可以.dnet在安装过程中,出错后总想着在网上搜一搜,结果很失望..本篇记录的不仅仅是解决安装 ...

  6. dp 动规 最佳加法表达式

    最佳加法表达式 有一个由1..9组成的数字串.问如果将m个加号插入到这个数字串中,在各种可能形成的表达式中,值最小的那个表达式的值是多少 解题思路 假定数字串长度是n,添完加号后,表达式的最后一个加号 ...

  7. hibernate 基于主键的单向一对一关联映射

    1.设计表结构 表结构对于基于外键的关联关系来说就少了外键的关联列,并且两张表共用同一个ID,表示一对一. 2.创建Person对象 3.创建IdCard对象 4.写hbm.xml文件 5.生成数据库 ...

  8. BZOJ1226 SDOI2009学校食堂

    这题状压DP太神了. g[i][j][k]表示前i-1个人都已打到饭,自己和后七个人打饭的情况是j,当前最后一个打饭的与i的关系是k 如果j&1==1说明当前这个人也打了饭,那么可以转移到g[ ...

  9. [SDOI2014]数数 --- AC自动机 + 数位DP

    [SDOI2014]数数 题目描述: 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串. 例如当S=(22,333,0233)时,233是幸运数,2333 ...

  10. bzoj 4097: [Usaco2013 dec]Vacation Planning

    4097: [Usaco2013 dec]Vacation Planning Description Air Bovinia is planning to connect the N farms (1 ...