界面预览:

由图中可以看出,此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. 【转】Mac OS X 中 Zsh 下 PATH 环境变量的正确设置

    在 Mac OS X 中使用 zsh,环境变量 PATH 一不小心就会变得很紊乱,表现为自己设置的路径总是被放到系统路径之后,部分路径还会有重复.这是我们不太了解 zsh 启动时加载文件的顺序和 Ma ...

  2. asp.net将本地Excel上传到服务器并把数据导入到数据库

    前台代码: <td class="formLabel"> 批量修改: </td> <td class="formInput"> ...

  3. Oracle ROWNUM用法和分页查询总结(转)

    [转载] Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询格式(一):http://yangtingkun.itpub.net/post/468/100278 ...

  4. Linux系统Load average负载详细解释

    我们知道判断一个系统的负载可以使用top,uptime等命令去查看,它分别记录了一分钟.五分钟.以及十五分钟的系统平均负载 例如我的某台服务器: $ uptime 09:50:21 up 200 da ...

  5. 去掉搜狗拼音烦人的x+;进入搜狗搜索

  6. [TypeScript] Configuring TypeScript Which Files to Compile with "Files" and "OutDir"

    This lesson shows how to configure the .tsconfig so you only compile the .ts files you want. It then ...

  7. [TypeScript] Configuring a New TypeScript Project

    This lesson walks you through creating your first .tsconfig configuration file which will tell the T ...

  8. RedHat7搭建Nginx+Apache+PHP

    Nginx做为前端服务器(本机IP:192.168.136.104),将访问PHP页面的动态请求转发给Apache服务器(只监听本地回环地址172.0.0.1:80) 安装Apache# yum -y ...

  9. jsp获取服务端的访问信息

    获取服务端访问信息 public static String getUrl(HttpServletRequest request){ String url = ""; if(req ...

  10. jquery easyui动态校验,easyui动态验证

    >>>>>>>>>>>>>>>>>>>>>>>>> ...