界面预览:

由图中可以看出,此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—短信发送器的实现的更多相关文章

  1. Android实现简单短信发送器

    布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to ...

  2. android开发学习---开发一个简易的短信发送器

    一.需求: 开发一个简易的短信发送器,输入:对方手机号码,短信内容,点击发送按钮,短信发送成功,对方手机成功收到短信. 其中要求短信内容过长时可以自动拆分,长度英文是160个英文,中文是70个,中英混 ...

  3. Android(java)学习笔记99:android的短信发送器研究

    1.第一种可以调用系统内部的短信程序. 之前我曾经出现过一个bug就是报错: android.content.ActivityNotFoundException: No Activity found ...

  4. 无废话Android之常见adb指令、电话拨号器、点击事件的4种写法、短信发送器、Android 中各种布局(1)

    1.Android是什么 手机设备的软件栈,包括一个完整的操作系统.中间件.关键的应用程序,底层是linux内核,安全管理.内存管理.进程管理.电源管理.硬件驱动 2.Dalvik VM 和 JVM ...

  5. Android实战--短信发送器

    首先设计界面 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...

  6. Android短信发送器_08

    1.string xml代码 <?xml version="1.0" encoding="utf-8"?> <resources> &l ...

  7. 初识安卓小程序(Android短信发送器)

    首先,先创建一个安卓项目(我的版本号是4.4.2的),名字为"短信发送器" 然后在res目录下找到layout目录,找到activity_main.xml或fragment_mai ...

  8. Android短信发送器(2)

    在上一篇的<Android短信发送器>当中.发送功能并不完好.当发送内容超过限定字数时,短信就会发送失败,此时就须要推断内容是否超过限制,假设不超过限制.就直接发送,反之.则对其进行处理再 ...

  9. Android_简易的短信发送器

    这个随笔将介绍如何完成一个简单的第三方的短信发送器(不打开短信界面,调用android的api完成功能) 1.首先,我们来做布局 由于我这里写的是一个简易的,,短信发送,所以只是一个LinearLay ...

随机推荐

  1. Poj 3695-Rectangles 矩形切割

    Rectangles Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3846   Accepted: 1124 Descri ...

  2. [ZETCODE]wxWidgets教程八:组件专题1

    本教程原文链接:http://zetcode.com/gui/wxwidgets/widgets/ 翻译:瓶哥 日期:2013年12月12日星期四 邮箱:414236069@qq.com 主页:htt ...

  3. 用C++的类做三种优先队列的实现

    学过数据结构的都知道优先队列这种东西,普通的队列是依据入队顺序,先入队的先出队,而优先队列则是依照键值,键值越大(或越小),就越先出队. 所以,优先队列基本支持push,pop,empty,size, ...

  4. 《神经网络和深度学习》系列文章三:sigmoid神经元

    出处: Michael Nielsen的<Neural Network and Deep Leraning>,点击末尾“阅读原文”即可查看英文原文. 本节译者:哈工大SCIR硕士生 徐伟 ...

  5. input text 字体的影响

    字体对input的影响 <html> <head> <meta charset="UTF-8"> </head> <style ...

  6. Sublime_text3怎么运行php代码

    开发神奇sublime写代码真的好爽,之前听说是神器,但是没去用,觉得用eclipse写php代码,用dw写html够用了,用了一下sublime,哈哈,爽爆了. 除了写前端代码外,还需要写php代码 ...

  7. GA遗传算法解析

    LinJM  @HQU 谈及遗传算法,我首先想到的就是孟德尔的豌豆实验.当然,遗传算法实质上并不能用豌豆实验说明,豌豆实验探讨了分离定律和自由组合定律,而遗传算法所借鉴的并不是这两个定律.遗传算法,简 ...

  8. git 命令归纳

    git 新手一枚,随用随更新 git clone git@example.com:project-name.git 克隆 git branch [-a -r] 查看分支[所有 远端] git pull ...

  9. DS18B20测温

    项目需要实现分布式大规模测温,需要52个测温点,采样DS18B20进行设计. 30cm一个点,一共8个点串联.采用国标单芯单股纯铜硬线BV0.5做导线,测试一会儿正常,一会儿不正常.后面换线了,测试正 ...

  10. 开源免费天气预报接口API以及全国全部地区代码!!(国家气象局提供)

    国家气象局提供的天气预报接口 接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data ...