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 来实现窗口显示和销毁,对于常规从快捷方式 ...
随机推荐
- info.plist文件里面添加描述 -> 配置定位,相册等
<key>NSAppleMusicUsageDescription</key> <string>App需要您的同意,才能访问媒体资料库</string> ...
- thinkjs REST API的跨域设置
用thinkjs也有一小段时间了,和其它国产框架一样,起初是处于观望态度.当然我最先的选择也不是thinkjs而是选的express,用到后面发现实现一个能让自己用着比较顺手的博客还是一件蛮困难或者说 ...
- vuex 操作姿势
Vuex 应用的核心就是 store,它包含着你的应用中大部分的状态 (state) 你不能直接改变 store 中的状态.改变 store 中的状态的唯一途径就是显式地提交 (commit) mut ...
- 手机锁屏js倒计时停止问题解决办法探索
如图,有这么个需求,测试人员在测试过程中提了一个bug,手机锁屏再唤醒倒计时时间没有更新,仍从锁屏的时间继续,于是开始寻找解决之法 经了解得知,锁屏时候,浏览器的一切活动会停止运行,那么js也无法幸免 ...
- 为什么ArrayList remove报错
不报错 List<String> userNames = new ArrayList<String>() {{ add("Hollis"); add(&qu ...
- Openstack关于Regions和Availability Zones
在AWS中有Region和Availability Zones的概念,并且在openstack中也实现了两者,只是不太容易看出来. 此文主要介绍他们的概念和关系,以及在openstack中的实现. 如 ...
- 安装与配置ironic
安装及配置 由于Ironic的配置很长,下面我们简短的说一下安装和配置过程,具体的安装配置教程参考官方手动配置教程或者使用devstack安装. Ironic需要与Nova.Neutron.Glanc ...
- Linux中的mysql操作(2)
1.终端启动MySQL:/etc/init.d/mysql start: 2.登录MySQL:mysql –u root -p (用root账户登录),然后输入密码: 3.查看所有的数据库名字:sho ...
- redis_安装
前面几章内容简单介绍了NoSql的概念,以及NoSql的几种分类,本文开始后面开始学习KV数据库Redis. 一.Redis是什么? Redis:REmote DIctionary Server(远程 ...
- Linux的十个最危险的命令
Linux命令行佷有用.很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候. 这篇文章将会向你介绍十条命令,但你最好不要尝试着去使用. 当然,以下命令通常都是在root权限下才 ...