这几天虽说偶遇瓶颈。但也渐入佳境。因为之前没有接触过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 接口请求返回通用json

    public class BaseResponseBody { // 不能添加属性 仅做泛型使用 } public class ResponseBase<T extends BaseRespon ...

  2. ref:Manual SQL injection discovery tips

    ref:https://gerbenjavado.com/manual-sql-injection-discovery-tips/ Manual SQL injection discovery tip ...

  3. 长安大学第四届ACM-ICPC“迎新杯”程序设计竞赛-重现赛 D - 新卡片游戏

    题目描述

  4. redis实现分布式锁工具类 灰常好用

    public interface RedisDistributionLock { /** * 加锁成功,返回加锁时间 * @param lockKey * @param threadName * @r ...

  5. QT学习笔记1:VS2015配置QT5.11

    由于工作关系,我又接触到了QT,在之前写过一篇博客是 在vs2017下配置openCV,当时用的是2015做的示范,现在就继续记录一下在VS2015下配置QT吧(VS2017配置是一样的) 第一部分: ...

  6. codevs 2173 忠诚

    2173 忠诚  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 钻石 Diamond   题目描述 Description 老管家是一个聪明能干的人.他为财主工作了整整10年,财 ...

  7. 51nod 1412 AVL树的种类

    非常简单的一道题,一眼题 枚举左儿子大小,再枚举深度即可 复杂度$O(n^2 log n)$ #include <cstdio> #include <cstring> #inc ...

  8. BZOJ 4036: [HAOI2015]按位或 集合幂函数 莫比乌斯变换 莫比乌斯反演

    http://www.lydsy.com/JudgeOnline/problem.php?id=4036 http://blog.csdn.net/lych_cys/article/details/5 ...

  9. zoj 3261 逆向并查集+离线处理

    题意:给出一些点,每个点有权值,然后有一些边,相连.无向的.然后有一些操作 链接:点我 query a.表示从a出发的能到达的所有点权值最大的点的编号(相同取编号最小,而且权值要比自己大) desto ...

  10. 置换python2.7.13的opcode遇到的一些坑

    主要有两个坑 1.XXXSLICE相关的opcode #define SLICE #define SLICE_1 #define SLICE_2 #define SLICE_3 #define STO ...