有以下两种方式来使用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的运行图标。 Eclipse的AVD上安装的应用程序,并启动它,如果一切设置和应用都没有问题,它会显示以下模拟器窗口:
选择移动设备作为一个选项,然后检查移动设备,这将显示以下画面:
现在可以输入所需的手机号码及文本消息发送,数量。最后点击发送短信按钮发送短信。请确保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的运行图标。 Eclipse的AVD上安装的应用程序,并启动它,如果一切设置和应用都没有问题,它会显示以下模拟器窗口:
选择移动设备作为一个选项,然后检查移动设备,这将显示以下画面:
现在使用Compose SMS“按钮推出Android内置的SMS客户端,如下图所示:
可以修改默认字段最后使用发送短信按钮(标有红色矩形)提到收件人发送短信。