这几天虽说偶遇瓶颈。但也渐入佳境。因为之前没有接触过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. Java Stream简介, 流的基本概念

    在Javaor .net编程中,  我们经常见到"stream" 这个字眼. 我们大概知道这是个流的意思, 如果看完本文的话, 应该会有1个大概的概念. 一, Java中什么是St ...

  2. CodeForces 805C Find Amir

    直觉. 先走$1$走到$n$,然后从$n$走到$2$,然后从$2$走到$n-1$,然后从$n-1$走到$3$.一次花费为$0$,一次花费为$1$. #include <cstdio> #i ...

  3. Android之 内容提供器(2)——创建自己的内容提供器将数据共享出去

    创建自己的内容提供器非常简单,只需要新建一个类继承ContentProvider类,通过实现ContentProvider的增删改查的方法向内容提供器中增删数据. 1 ContentProvider简 ...

  4. dp 神奇的口袋

    有一个神奇的口袋,总的容积是40,用这个口袋可以变出一 些物品,这些物品的总体积必须是40.  John现在有n(1≤n ≤ 20)个想要得到的物品,每个物品 的体积分别是a1,a2--an.Joh ...

  5. bzoj4556: [Tjoi2016&Heoi2016]字符串 (后缀数组加主席树)

    题目是给出一个字符串,每次询问一个区间[a,b]中所有的子串和另一个区间[c,d]的lcp最大值,首先求出后缀数组,对于lcp的最大值肯定是rank[c]的前驱和后继,但是对于这个题会出现问题,就是题 ...

  6. BZOJ4556 HEOI2016 字符串

    后缀数组. 复习了后缀数组后发现这题真的很好写. 我们只需要将c依次向前向后扩展,找落在[a,b]区间内的最大值,遍历过程中不断用height数组更新. 复杂度就是后缀数组,比主席树的快多了. By: ...

  7. [BZOJ5109][LOJ #6252][P4061][CodePlus 2017 11月赛]大吉大利,今晚吃鸡!(最短路+拓扑排序+传递闭包+map+bitset(hash+压位))

    5109: [CodePlus 2017]大吉大利,晚上吃鸡! Time Limit: 30 Sec  Memory Limit: 1024 MBSubmit: 107  Solved: 57[Sub ...

  8. POJ3744 Scout YYF I 概率DP+矩阵快速幂

    http://poj.org/problem?id=3744 题意:一条路,起点为1,有概率p走一步,概率1-p跳过一格(不走中间格的走两步),有n个点不能走,问到达终点(即最后一个坏点后)不踩坏点的 ...

  9. mof提权原理及实现

    关于 mof 提权的原理其实很简单,就是利用了c:/windows/system32/wbem/mof/目录下的 nullevt.mof 文件,每分钟都会在一个特定的时间去执行一次的特性,来写入我们的 ...

  10. DML、DDL、DCL是什么?

    一.DML DML(data manipulation language)数据操纵语言: 我们经常会用到的 INSERT.DELETE.UPDATE.SELECT语句. 主要用来对数据库的数据进行一些 ...