首页 > 代码库 > Android学习4—短信发送器的实现

Android学习4—短信发送器的实现

界面预览:

截图未命名

由图中可以看出,此APP需要的组件有:两个TextView,一个用于显示手机号码的标题,另一个用于显示短信内容的标题。

                                                两个EditText,一个用于存放手机号码,另一个用于存放即将的发送短信的内容。

                                                一个Button,用于确认发送信息。

 

故在main_activity.xml中的代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="手机号码" />
   
    <EditText
        android:id="@+id/main_activity_telephone"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
   
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="短信内容"/>
   
    <EditText
        android:id="@+id/main_activity_message"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:minLines="3"
        android:maxLines="7"/>
   
    <Button
        android:id="@+id/main_activity_sendButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送"/>

</LinearLayout>

代码解释:

在这段代码中,其布局和上一个学习例子类似,不同的地方就是,此Activity布局文件有5个控件,且第三个控件的属性中多了一些和上面3个不同的地方,那就是minLines和maxLines3,minLines表示这个文本输入框最小的显示高度为3行数据的高度,maxLines表示文本输入框最大的显示高度为7行数据的高度。之所以添加最大行的限制,是为了防止当短信内容过多时,其文本框变大时,由于过大而影响了Button控件的显示效果。

MainActivity.java文件的代码编写:

package com.example.messageSender;

import java.util.ArrayList;

import android.support.v7.app.ActionBarActivity;
import android.telephony.SmsManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

    private Button sendButton;
    private EditText phoneNumber,messages;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sendButton = (Button) findViewById(R.id.main_activity_sendButton);
        phoneNumber = (EditText) findViewById(R.id.main_activity_telephone);
        messages = (EditText) findViewById(R.id.main_activity_message);
       
        sendButton.setOnClickListener(new ButtonOnClick());
    }
   
    private final class ButtonOnClick implements View.OnClickListener{

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String telephone = phoneNumber.getText().toString().trim();
            String sendMessages = messages.getText().toString();
            SmsManager smsManager = SmsManager.getDefault();
            ArrayList<String> messageArr = smsManager.divideMessage(sendMessages);
           
            for(String message : messageArr){
                smsManager.sendTextMessage(telephone, null, message, null, null);
            }
           
            Toast.makeText(MainActivity.this, "短信发送成功", Toast.LENGTH_LONG).show();
        }
       
    }
}

在这段代码中有好多和上一个例程相同的地方,所以我重点讲解ButtonOnClick类中onClick方法中的代码(偷偷懒O(∩_∩)O~)

在这段代码中,首先是获取电话号码telephone和短信内容sendMessages,然后通过SmsManager类来实现短信发送的功能,通过SmsManager.getDefault()方法获取短信发送管理器,然后通过短信发送管理器的divideMessage方法,将短信的内容分成多个短信片段(因为Android每次发送的短信内容数量有限制,所以对于过长的短信内容可以通过此方法将短信内容分成多个信息进行分别发送),最后调用短信发送管理器的sendTextMessage方法将短信发送出去。对于sendTextMessage方法中的参数:

第一个参数为发送目标的电话号码

第二个参数为服务中心的地址,如果为null则使用当前默认的短信服务中心(如果你的手机为移动,则使用移动服务中心,如果为联通,则使用联通服务中心……)

第三个参数为发送消息的内容

第四个参数表示发送成功和失败分别进行怎样的处理,若为null,则当消息发送成功或失败时,则这个PendingIntent就进行广播,结果代码是Activity.RESULT_OK表示成功,或RESULT_ERROR_GENERIC_FAILURE、RESULT_ERROR_RADIO_OFF、RESULT_ERROR_NULL_PDU之一表示错误。对应RESULT_ERROR_GENERIC_FAILURE,sentIntent可能包括额外的“错误代码”包含一个无线电广播技术特定的值,通常只在修复故障时有用。此处,我直接使用null(更详细的用法请参考官方的API)。

第五个参数用于验证接收方是否接收到改短信内容。如果不为空,则当消息成功传送到接受者是,这个PendingIntent就广播。

注:如果你的短信内容或接收方手机号码为空,则将会产生IllegalArgumentException异常。

最后为了显示信息发送完毕,使用一个Toast弹出一个显示消息:

Toast.makeText(MainActivity.this, "短信发送成功", Toast.LENGTH_LONG).show();

makeText的第一个参数表示一个上下文对象,第二个参数表示为显示的内容,最后一个参数为显示该Toast的时间长短,Toast.LENGTH_LONG表示显示时间稍微长一点,Toast.LENGTH_SHORT表示显示时间稍微短一些,随后别忘记了调用该Toast的show方法将其显示出来。

 

最后,和上一章的电话拨号器一样,由于App使用了系统权限,所以要给app添加一个用户权限,在AndroidManifest.xml配置中添加如下代码:

<uses-permission android:name="android.permission.SEND_SMS"/>

最后运行,效果如下:

                                      截图未命名

Android学习4—短信发送器的实现