Android从无知到有知——NO.2
这几天虽说偶遇瓶颈。但也渐入佳境。因为之前没有接触过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的更多相关文章
- Android从无知到有知——NO.7
的ip拨号器在监听外拨电话时用的是系统提供的广播事件.而有些时候我们须要自己设定广播事件来满足特定的须要. Ok,今天整一下自己定义广播事件,我们用一个状态监測模块向一个3G模块发送报警信息来实现这一 ...
- Android从无知到有知——NO.1
如期而至的软件设计大赛吹响了重生的号角.正如同我们的指导老师所说,这个暑假会影响你近几年的发展,也可能会决定你以后所走的道路. 是的.我身边就有非常好的样例,有些师哥师姐们常常跟我们说.软件大赛不仅使 ...
- Android从无知到有知——NO.3
昨天看了下几种常见的布局,类似于曾经学的html.关于css+div没有接触太多,但这几种布局都比較简单.仅仅要逻辑没有太大问题就能整出来. 相对布局是我们平时默认的布局,也是最经常使用的.前边做的& ...
- Android从无知到有知——NO.5
今天整一下利用广播实现ip拨号. 这一块主要用到的知识是android四大组件之中的一个的broadcast receiver(广播接收者).那么它接收什么东东呢,就是我们所无谓的一个个的事件,比 ...
- Android从无知到有知——NO.6
紧随上一篇,说一下创建ip拨号器过程中出现的一些问题. 1)在一開始监听外拨电话的时候会报这样一个警告: Permission Denial: receiving Intent { act=andro ...
- Android从无知到有知——NO.4
因为我们做的是手机安全卫士,因此,我们需要一个地图定位功能,些相关的项目,也有一些教程.到百度官方下载了相关的jar包和API,但自己建项目的时候却不是那么顺利,bug不断,弄得心烦意乱,最后最终臣服 ...
- Android仿今日头条和知乎等App顶部滑动导航实现代码分析及源码下载
一.本文所涉及到的知识点 源码下载 二.目标 通过利用ViewPager+FragmentStatePagerAdapter+TabLayout 实现顶部滑动效果,如图: 三.知识点讲解 1.View ...
- Docker学习-从无知到有知的学习过程
Docker学习 最近被别人提到的docker吸引到了注意力,所以打算先快速的了解一下docker到底是个上面东西. 之所以我写下这个文档呢,是为了记录对docker一无所知我是如何进行学习一门新技术 ...
- Android 程序员必须知道的 53 个知识点
1. android 单实例运行方法 我们都知道 Android 平台没有任务管理器,而内部 App 维护者一个 Activity history stack 来实现窗口显示和销毁,对于常规从快捷方式 ...
随机推荐
- 移动App 的 ios11 和 iPhoneX 适配
原文链接:https://blog.csdn.net/lovelyelfpop/article/details/79460700 WKWebView 调用拨打电话功能 1.HTML 要标记添加标记电话 ...
- 洛谷P2408 不同字串个数 [后缀数组]
题目传送门 不同字串个数 题目背景 因为NOI被虐傻了,蒟蒻的YJQ准备来学习一下字符串,于是它碰到了这样一道题: 题目描述 给你一个长为N的字符串,求不同的子串的个数 我们定义两个子串不同,当且仅当 ...
- centos 7 安装python3.5
1.安装编译环境 yum groupinstall 'Development Tools' yum install zlib-devel bzip2-devel openssl-devel ncure ...
- java面试题一
个人的一点参考总结,如有雷同,纯属巧合! 1.hashmap的实现原理以及hashtable的线程安全是怎么实现的?HashMap其实也是一个线性的数组实现的,所以可以理解为其存储数据的容器就是一个线 ...
- 基础数据类型汇总补充;集合set ;深浅copy
首先回顾: 小数据池:int -5~256str 特殊字符,*数字20 ascii : 8位 1字节 表示1个字符unicode 32位 4个字节 表示一个字符utf- 8 1个英文 8位,1个字节 ...
- JZYZOJ1311 邮局设置问题 dp
易得每两个点之间建立邮局的最好位置为两点最中间的点,两点之间如果没有奇数个数的点则中间两个点都可以...(自己画一下图可以看出随着右边点的增大最佳点的增大非常平滑...强迫症一本满足) w[i][ ...
- 【SDOI2017】树点染色【线段树+LCT】
本来只是想练练LCT,没想到是个线段树 对于操作1:诶新的颜色?这不是access吗? 也就是说,我们用一棵splay来表示一种颜色 操作2直接在LCT上乱搞-- 不对啊,操作3要查子树 诶好像是静态 ...
- 【动态规划/多重背包问题】POJ2392-Space Elevator
方法同POJ1014-Dividing,唯一不同点在于每一种block有最大限定高度a,故要以a为关键字进行排序,使得最大高度小的在前,否则最大高度小的再后可能放不上去. #include<io ...
- bzoj 1026
很久以前做过的一道数位DP,现在用一种新的解决数位DP的比较一般的方法. 数位DP裸题是:求[L,R]有多少个数. 先转化成求[0,R]有多少个数,然后区间相减即可. 对于[0,R]中的所有数,用0补 ...
- leetcode76. Minimum Window Substring
leetcode76. Minimum Window Substring 题意: 给定字符串S和字符串T,找到S中的最小窗口,其中将包含复杂度O(n)中T中的所有字符. 例如, S ="AD ...