这几天虽说偶遇瓶颈,但也渐入佳境,由于之前没有接触过android,所以作为一个新手不会给自己过高的要求。相比于去年做的分布式资源检索,今年的移动开发着实要简单一些,虽然其本质没有太大的区别,但从用户体验方面来说更能激发每一位学习者的兴趣,这可能就是android的魅力所在吧...
前天做的“电话拨号器”,最后加载到模拟器的时候不知道哪里出了错,系统总是自动关闭,恼羞成怒也就没再搭理它;昨天又做了“短信发送器”,也遇到了和前者相似的问题,不过最后经过调试算是研制成功了吧,因此调整了前者,相同的解决方案,外瑞古德~~~那接下来就以“短信发送器”为例谈谈自己的一些学习心得吧...
首先上图一张:
咱先来说说这个短信发送器的基本构造,大家从上图也可看出,其大体可分为五部分,其实也就是两条提示+两个输入框,还有一个发送按钮。那么这五部分是怎么出来的,先来看一小段代码:
<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 bt_sent=(Button)findViewById(R.id.bt_sent); bt_sent.setOnClickListener(this);这里边涉及了几个常用的方法,大家看其表面意思也能了解,先通过id找到按钮,然后调用其方法设定点击事件;下边的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时代到来,敬请期待……