Android 发送短信/SMS

有以下两种方式来使用Android设备发送短信:

  • 使用SmsManager发送短信

  • 使用内置Intent 发送短信

使用SmsManager 发送短信

SmsManager管理,例如在给定的移动设备将数据发送到的SMS操作。可以创建此对象调用静态方法SmsManager.getDefault() 如下:

SmsManager smsManager =SmsManager.getDefault();

一旦有SmsManager 对象,可以使用sendDataMessage()方法发送短信在指定的手机号码如下:

smsManager.sendTextMessage("phoneNo",null,"SMS text",null,null);

除了上述方法外,还有SmsManager的类的可供选择的其他几个重要的功能。下面列出了这些方法:

S.N. 方法和说明
1 ArrayList<String> divideMessage(String text) 
This method divides a message text into several fragments, none bigger than the maximum SMS message size.
2 static SmsManager getDefault() 
This method is used to get the default instance of the SmsManager
3 void sendDataMessage(String destinationAddress, String scAddress, short destinationPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) 
This method is used to send a data based SMS to a specific application port.
4 void sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents) 
Send a multi-part text based SMS.
5 void sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) 
Send a text based SMS.

示例

下面的示例演示如何在实际使用SmsManager的对象给定的手机号码发送短信。

要尝试这个例子中,需要实际配备了最新的Android OS的移动设备,否则仿真器可能无法正常工作。
步骤 描述
1 You will use Eclipse IDE to create an Android application and name it as SendSMSDemounder a package com.example.sendsmsdemo. While creating this project, make sure youTarget SDK and Compile With at the latest version of Android SDK to use higher levels of APIs.
2 Modify src/MainActivity.java file and add required code to take care of sending email.
3 Modify layout XML file res/layout/activity_main.xml add any GUI component if required. I‘m adding a simple GUI to take mobile number and SMS text to be sent and a simple button to send SMS.
4 Modify res/values/strings.xml to define required constant values
5 Modify AndroidManifest.xml as shown below
6 Run the application to launch Android emulator and verify the result of the changes done in the aplication.

以下是修改的主要活动文件的内容src/com.example.sendsmsdemo/MainActivity.java.

package com.example.sendsmsdemo;import android.os.Bundle;import android.app.Activity;import android.telephony.SmsManager;import android.util.Log;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;publicclassMainActivityextendsActivity{Button sendBtn;EditText txtphoneNo;EditText txtMessage;@Overrideprotectedvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      sendBtn =(Button) findViewById(R.id.btnSendSMS);
      txtphoneNo =(EditText) findViewById(R.id.editTextPhoneNo);
      txtMessage =(EditText) findViewById(R.id.editTextSMS);

      sendBtn.setOnClickListener(newView.OnClickListener(){publicvoid onClick(View view){
            sendSMSMessage();}});}protectedvoid sendSMSMessage(){Log.i("Send SMS","");String phoneNo = txtphoneNo.getText().toString();String message = txtMessage.getText().toString();try{SmsManager smsManager =SmsManager.getDefault();
         smsManager.sendTextMessage(phoneNo,null, message,null,null);Toast.makeText(getApplicationContext(),"SMS sent.",Toast.LENGTH_LONG).show();}catch(Exception e){Toast.makeText(getApplicationContext(),"SMS faild, please try again.",Toast.LENGTH_LONG).show();
         e.printStackTrace();}}@Overridepublicboolean onCreateOptionsMenu(Menu menu){// Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);returntrue;}}

下面是 res/layout/activity_main.xml 文件的内容:

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"><TextViewandroid:id="@+id/textViewPhoneNo"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/phone_label"/><EditTextandroid:id="@+id/editTextPhoneNo"android:layout_width="fill_parent"android:layout_height="wrap_content"android:inputType="phone"/><TextViewandroid:id="@+id/textViewMessage"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/sms_label"/><EditTextandroid:id="@+id/editTextSMS"android:layout_width="fill_parent"android:layout_height="wrap_content"android:inputType="textMultiLine"/><Buttonandroid:id="@+id/btnSendSMS"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/send_sms_label"/></LinearLayout>

下面文件 res/values/strings.xml 的内容中定义两个新的常量:

<?xml version="1.0" encoding="utf-8"?><resources><stringname="app_name">SendSMSDemo</string><stringname="action_settings">Settings</string><stringname="hello_world">Hello world!</string><stringname="phone_label">Enter Phone Number:</string><stringname="sms_label">Enter SMS Message:</string><stringname="send_sms_label">Send SMS</string></resources>

以下是AndroidManifest.xml 文件的默认内容:

<?xml version="1.0" encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.example.sendsmsdemo"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="17"/><uses-permissionandroid:name="android.permission.SEND_SMS"/><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme"><activityandroid:name="com.example.sendsmsdemo.MainActivity"android:label="@string/app_name"><intent-filter><actionandroid:name="android.intent.action.MAIN"/><categoryandroid:name="android.intent.category.LAUNCHER"/></intent-filter></activity></application></manifest>

我们尝试运行SendSMSDemo 应用程序。我假设创造了AVD,同时做环境设置。从Eclipse中,打开项目,活动文件中运行的应用程序,然后单击“运行”Eclipse的运行图标Android 发送短信/SMS。 Eclipse的AVD上安装的应用程序,并启动它,如果一切设置和应用都没有问题,它会显示以下模拟器窗口: 

Android 发送短信/SMS

选择移动设备作为一个选项,然后检查移动设备,这将显示以下画面:

Android 发送短信/SMS

现在可以输入所需的手机号码及文本消息发送,数量。最后点击发送短信按钮发送短信。请确保GSM连接工作正常,提供短信收件人。

可以把一些短信用逗号分隔,在程序中把它解析为一个数组的字符串,最后可以使用一个循环来发送消息给所有给定的数字。编写自己的SMS客户端。下一节将学习如何使用现有的SMS客户端发送短信。

使用内置Intent发送短信

发送短信通过调用Android内置短信功能,可以使用Android的Intent。以下部分说明Intent对象发送短信所需的不同部分。

Intent 对象 - 动作发送短信

使用ACTION_VIEW的动作启动Android设备上安装SMS客户端。以下是简单的语法来创建一个Intent与ACTION_VIEW动作

Intent smsIntent =newIntent(Intent.ACTION_VIEW);

Intent 对象 - 数据/发送短信类型

要发送的短信您需要指定smsto:作为URI使用SetData()方法和数据类型将使用setType()方法如下vnd.android-dir/mms-sms: 

smsIntent.setData(Uri.parse("smsto:"));
smsIntent.setType("vnd.android-dir/mms-sms");

Intent 对象- 附加发送短信

Android已经内置支持添加电话号码和短信发送短信如下:

smsIntent.putExtra("address",newString("0123456789;3393993300"));
smsIntent.putExtra("sms_body","Test SMS to Angilla");
这里address 和sms_body是大小写敏感的,应仅在小字符指定。可以指定一个以上的号码在单串,但由分号(;)隔开。

示例

下面的示例演示如何在实际使用Intent对象启动SMS客户端发送短信给定的收件人。

要尝试这个例子中,需要实际配备了最新的Android OS的移动设备,否则仿真器可能无法正常工作。
步骤 描述
1 You will use Eclipse IDE to create an Android application and name it as SendSMSDemounder a package com.example.sendsmsdemo. While creating this project, make sure youTarget SDK and Compile With at the latest version of Android SDK to use higher levels of APIs.
2 Modify src/MainActivity.java file and add required code to take care of sending SMS.
3 Modify layout XML file res/layout/activity_main.xml add any GUI component if required. I‘m adding a simple button to launch SMS Client.
4 Modify res/values/strings.xml to define required constant values
5 Modify AndroidManifest.xml as shown below
6 Run the application to launch Android emulator and verify the result of the changes done in the aplication.

以下是修改的主要活动文件的内容 src/com.example.sendsmsdemo/MainActivity.java.

package com.example.sendsmsdemo;import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.util.Log;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.Toast;publicclassMainActivityextendsActivity{@Overrideprotectedvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);Button startBtn =(Button) findViewById(R.id.sendSMS);
      startBtn.setOnClickListener(newView.OnClickListener(){publicvoid onClick(View view){
         sendSMS();}});}protectedvoid sendSMS(){Log.i("Send SMS","");Intent smsIntent =newIntent(Intent.ACTION_VIEW);
      smsIntent.setData(Uri.parse("smsto:"));
      smsIntent.setType("vnd.android-dir/mms-sms");

      smsIntent.putExtra("address",newString("0123456789"));
      smsIntent.putExtra("sms_body","Test SMS to Angilla");try{
         startActivity(smsIntent);
         finish();Log.i("Finished sending SMS...","");}catch(android.content.ActivityNotFoundException ex){Toast.makeText(MainActivity.this,"SMS faild, please try again later.",Toast.LENGTH_SHORT).show();}}@Overridepublicboolean onCreateOptionsMenu(Menu menu){// Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);returntrue;}}

下面是 res/layout/activity_main.xml 文件的内容:

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"><Buttonandroid:id="@+id/sendSMS"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/compose_sms"/></LinearLayout>

下面文件 res/values/strings.xml 的内容中定义两个新的常量:

<?xml version="1.0" encoding="utf-8"?><resources><stringname="app_name">SendSMSDemo</string><stringname="hello_world">Hello world!</string><stringname="action_settings">Settings</string><stringname="compose_sms">Compose SMS</string></resources>

以下是AndroidManifest.xml 文件的默认内容:

<?xml version="1.0" encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.example.sendsmsdemo"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="17"/><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme"><activityandroid:name="com.example.sendsmsdemo.MainActivity"android:label="@string/app_name"><intent-filter><actionandroid:name="android.intent.action.MAIN"/><categoryandroid:name="android.intent.category.LAUNCHER"/></intent-filter></activity></application></manifest>

我们尝试运行SendSMSDemo 应用程序。我假设创造了AVD,同时做环境设置。从Eclipse中,打开项目,活动文件中运行的应用程序,然后单击“运行”Eclipse的运行图标Android 发送短信/SMS。 Eclipse的AVD上安装的应用程序,并启动它,如果一切设置和应用都没有问题,它会显示以下模拟器窗口: 

Android 发送短信/SMS

选择移动设备作为一个选项,然后检查移动设备,这将显示以下画面:

Android 发送短信/SMS

现在使用Compose SMS“按钮推出Android内置的SMS客户端,如下图所示:

Android 发送短信/SMS

可以修改默认字段最后使用发送短信按钮(标有红色矩形)提到收件人发送短信。

Android 发送短信/SMS,布布扣,bubuko.com

Android 发送短信/SMS

上一篇:SSH项目tomcat发布时,Initializing Spring root WebApplicationContext卡死不动


下一篇:Android WebView的使用方法总结