Android学习笔记(2)——短信发送器

搬运自本人博客:http://www.xgezhang.com/android_sms.html

上一篇文章中我们学着写了一个电话拨号器,这里我们继续来写一个短信发送器。

同样的按一般app开发的步骤,首先先确定下UI界面,大致效果应该是这样:

Android学习笔记(2)——短信发送器-xge技术博客

那么界面要怎么完成了?这种布局可以采用线性布局来做,比较方便。这里还是采用的相对布局,先上xml文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
< RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
     xmlns:tools = "http://schemas.android.com/tools"
     android:layout_width = "match_parent"
     android:layout_height = "match_parent"
     android:paddingBottom = "@dimen/activity_vertical_margin"
     android:paddingLeft = "@dimen/activity_horizontal_margin"
     android:paddingRight = "@dimen/activity_horizontal_margin"
     android:paddingTop = "@dimen/activity_vertical_margin"
     tools:context = "com.example.sms.MainActivity" >
 
     < TextView
         android:id = "@+id/tv_input_number"
         android:layout_width = "wrap_content"
         android:layout_height = "wrap_content"
         android:layout_alignParentLeft = "true"
         android:layout_alignParentTop = "true"
         android:text = "@string/please_input_number"
         android:textSize = "20sp"
         />
 
     < EditText
         android:singleLine = "true"
         android:id = "@+id/et_number"
         android:layout_width = "match_parent"
         android:layout_height = "wrap_content"
     android:layout_below = "@id/tv_input_number"
         android:inputType = "phone" >
         < requestFocus />
     </ EditText >
 
     < TextView
         android:id = "@+id/tv_input_content"
         android:layout_width = "wrap_content"
         android:layout_height = "wrap_content"
         android:layout_alignLeft = "@+id/et_number"
         android:layout_below = "@id/et_number"
         android:text = "@string/please_input_message"
         android:textSize = "20sp"
         />
     
     < EditText
         android:lines = "5"
         android:id = "@+id/et_content"
         android:layout_width = "match_parent"
         android:layout_height = "wrap_content"
         android:layout_alignLeft = "@+id/et_number"
         android:layout_below = "@id/tv_input_content"
         android:ems = "10"
         android:inputType = "textMultiLine" />
 
     < Button
         android:id = "@+id/bt_send"
         android:layout_width = "wrap_content"
         android:layout_height = "wrap_content"
         android:layout_below = "@+id/et_content"
         android:text = "@string/send_message" />
 
</ RelativeLayout >

比较容易看懂,只是注意一下第二个EditText,有一个参数为android:lines=”5″,这里可以用来确定要显示的行数。

接下来我们来根据需求思考以下具体的代码该如何实现,我们要做以下几件事:

  • 提取et_number 和 et_content里面的内容,备用。
  • 点击发送按钮,发送短信(这里可以判断一下是否为空)

那首先是提取内容,直接用findViewById即可:

?
1
2
mEditTextNumber = (EditText) findViewById(R.id.et_number);
mEditTextContent = (EditText) findViewById(R.id.et_content);

然后是注册点击事件,这里我们用另外一种更为常见的点击事件注册的写法来完成,即让MainActivity类来实现OnclickListener的接口,因此调用的时候只需要:

?
1
2
3
4
public class MainActivity extends Activity implements OnClickListener {
     Button bt_send = (Button) findViewById(R.id.bt_send);
     bt_send.setOnClickListener( this );
}

这种写法有一个好处,就是如果一个Activity上有10个按钮,采用内部类的方法的话就得写10个内部类,特别麻烦。而采用这种方法只需要实现一个函数即可,针对不同的按钮可以采用switch语句判断传递进来的到底是哪个按钮的id,然后根据返回值做出相应的动作。

最后就是去写接口未完成的函数 Onclick()了,和电话拨打器一样,我们可以判断以下填写的内容是否为空,然后用Toast.makeText来制作错误提示信息。短信发送我们采用的是内置的smsManager,在写SmsManager的时候,系统会提示说SmsManager已经被android.telephony替换,原因是SmsManager只支持GSM,而后者可以支持3G的一些制式,不过这里可以不用管它。

最后我们还要考虑到,对于一条短信,往往有字符的限制(比如中国一条短信是70个汉字),如果超过的话短信会发送失败。因此我们需要把这样的短信拆分出来,具体操作我们也不用担心,已经有写好的函数供我们调用了。具体实现参考如下代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void onClick(View v) {
         switch (v.getId()) {
         case R.id.bt_send:
             String content = mEditTextContent.getText().toString().trim();
             String number = mEditTextNumber.getText().toString().trim();
             if (TextUtils.isEmpty(content)||TextUtils.isEmpty(number)){
                 Toast.makeText( this , "电话号码或内容为空" , Toast.LENGTH_SHORT);
                 return ;
             } else {
                 SmsManager smsManager = SmsManager.getDefault();
                 //拆分短信 成为一个arrayList
                 ArrayList<String> contents = smsManager.divideMessage(content);
                 for (String str: contents){
                     smsManager.sendTextMessage(number, null , str, null , null );
                 }
             }
             break ;
 
         default :
             break ;
         }
     }

最后我们再在AndroidManifest文件中开启SEND_SMS的permission,部署到模拟器上,就可以进行测试了。

Android学习笔记(2)——短信发送器-xge技术博客

MainActivity.java 完整代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.example.sms;
 
import java.util.ArrayList;
 
import android.R.string;
import android.app.Activity;
import android.os.Bundle;
import android.telephony.gsm.SmsManager;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
public class MainActivity extends Activity implements OnClickListener {
     private EditText mEditTextNumber;
     private EditText mEditTextContent;
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         mEditTextNumber = (EditText) findViewById(R.id.et_number);
         mEditTextContent = (EditText) findViewById(R.id.et_content);
         Button bt_send = (Button) findViewById(R.id.bt_send);
         bt_send.setOnClickListener( this );
     }
 
     @Override
     public void onClick(View v) {
         switch (v.getId()) {
         case R.id.bt_send:
             String content = mEditTextContent.getText().toString().trim();
             String number = mEditTextNumber.getText().toString().trim();
             if (TextUtils.isEmpty(content)||TextUtils.isEmpty(number)){
                 Toast.makeText( this , "电话号码或内容为空" , Toast.LENGTH_SHORT);
                 return ;
             } else {
                 SmsManager smsManager = SmsManager.getDefault();
                 //拆分短信 成为一个arrayList
                 ArrayList<String> contents = smsManager.divideMessage(content);
                 for (String str: contents){
                     smsManager.sendTextMessage(number, null , str, null , null );
                 }
             }
             break ;
 
         default :
             break ;
         }
     }
 
}

欢迎转载,请注明出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值