界面预览:

由图中可以看出,此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. 使用Pig预测电信用户的移动路径

    实战数据: 预期结果: 测试数据: 002|2014-09-10 00-09|东油大学 002|2014-09-10 09-17|学苑小区 001|2014-09-12 00-09|东油大学 001| ...

  2. html自定义checkbox、radio、select —— select篇

    上一篇<html自定义checkbox.radio.select —— checkbox.radio篇>介绍了我们是怎么将 html 自带的 checkbox.radio 改成我们自定义的 ...

  3. mysql 备份与还原

    http://dev.yesky.com/281/35291281.shtml 每一种逻辑错误发生的概率都极低,但是当多种可能性叠加的时候,小概率事件就 放大成很大的安全隐患,这时候备份的必要性就凸显 ...

  4. dell vfoglight

    vFoglight针对RH/Vmware/Hyper-v/Vsphere环境的相关软件包下载链接 https://software.dell.com/register/getfile/?param=2 ...

  5. 深入理解 Spring 事务原理

    本文由码农网 – 吴极心原创,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 一.事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供 ...

  6. 3 weekend110的shuffle机制 + mr程序的组件全貌

    前面,讲到了hadoop的序列化机制,mr程序开发,自定义排序,自定义分组. 有多少个reduce的并发任务数可以控制,但有多少个map的并发任务数还没 缓存,分组,排序,转发,这些都是mr的shuf ...

  7. SqlCommand对象

    SqlCommand对象以及如何使用它与数据库交互 1.什么是command对象2.如何使用ExecuteReader方法查询数据3.如何使用ExecuteNonQuery方法插入和删除对象4.如何使 ...

  8. struts2环境搭建和第一个程序

    环境搭建 项目目录 导入依赖jar包,如上图lib目录所示. 不同的版本可能会不一样,没关系在tomcat启动时,如果报错java.lang.ClassNotFoundException,我们可以按照 ...

  9. UVA 297 Quadtrees(四叉树建树、合并与遍历)

    <span style="font-size: 18pt; font-family: Arial, Helvetica, sans-serif; background-color: r ...

  10. Highcharts可拖动式图表

    Highcharts可拖动式图表 默认情况下,Highcharts依据给定的数据列生成图表. 浏览者是无法改动图表的. 假设浏览者须要手动调整数据节点.就须要借助第三方插件Draggable Poin ...