我们在"Android学习系列(一)-电话拨号器中"继续”短信发送器“的学习,具体思路如下:
(1)在"main.xml"布局文件中,增加"发送短信"的按钮,在对应的class文件中,监听按钮点击事件,让其进入 发送短信 Activity;
(2)新建”message.xml“布局文件,布局包括输入号码和短信内容的输入框,以及”发送短信“的点击按钮;
(3)创建"Activity_Message.class",实现View.OnClickListener接口,监听 message.xml ”发送短信“按钮点击事件,利用SmsManger类实现短信的发送。
(4)在"AndroidManifest.xml"配置文件中声明 Activity_Message 以及允许使用 SEND_SMS的权限。
具体代码实现如下:
(1)在”main.xml“中增加”发送短信“的按钮
<Button
android:id="@+id/bt_message_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bt_message_text"/>
注意要在”string.xml“中声明 bt_message_text 变量
<string name="bt_message_text">发送短信</string>
(2)在”Activity_Main.class“中监听该按钮的点击事件,在onCreate方法中创建监听事件(注意该类已经实现View.OnClickListener接口) ,在重写的接口方法”onClick“中切换到发送短信的Activity中。
package com.android.dail;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Activity_Main extends Activity implements View.OnClickListener {
private EditText et_number; //输入框View
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//文本框view
et_number = (EditText) this.findViewById(R.id.et_number);
//按钮View
Button bt_number = (Button) this.findViewById(R.id.bt_number);
//点击事件实现方法(3)当前类自己实现点击事件接口,重写接口onClick方法,根据Button的id,执行不同Button点击事件
bt_number.setOnClickListener(this);
//发送短信按钮
Button btMessageMain = (Button) this.findViewById(R.id.bt_message_main);
btMessageMain.setOnClickListener(this);
}
/**
* 点击事件实现方法(3)当前类自己实现点击事件接口,重写接口onClick方法,根据Button的id,执行不同Button点击事件
* @param v
*/
@Override
public void onClick(View v){
switch (v.getId()){
case R.id.bt_number:
this.callPhone();
break;
case R.id.bt_message_main:
Intent intent = new Intent();
intent.setClass(Activity_Main.this, Activity_Message.class);
this.startActivity(intent);
break;
default:
break;
}
}
/**
* 拨打电话
* 获取号码输入框的号码,如果电话为空,弹出提示
* 使用Intent机制来进行电话拨打
*/
public void callPhone(){
String number = et_number.getText().toString().trim();
if(TextUtils.isEmpty(number)){
Toast.makeText(Activity_Main.this, "号码不能为空", Toast.LENGTH_SHORT).show();
return;
}
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+number));
startActivity(intent);
}
}
(3)新建”message.xml“布局文件,布局包括输入号码和短信内容的输入框,以及”发送短信“的点击按钮
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/et_number_text"/>
<EditText
android:id="@+id/et_number_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="phone"
android:singleLine="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/et_message_text"
android:textColor="#ff0000"/>
<EditText
android:id="@+id/et_content_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lines="5"/>
<Button
android:id="@+id/bt_send_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bt_message_text"/>
</LinearLayout>
在”string.xml“中声明 相应的变量
<string name="et_number_text">电话号码</string>
<string name="et_message_text">短信内容</string>
(4)创建"Activity_Message.class",实现View.OnClickListener接口,监听 message.xml ”发送短信“按钮点击事件,利用SmsManger类实现短信的发送。
package com.android.dail;
import android.app.Activity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.util.ArrayList;
/**
* Created by nancy on 15-9-10.
*/
public class Activity_Message extends Activity implements View.OnClickListener {
private EditText etNumberMessage;
private EditText etContentMessage;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.message);
etNumberMessage = (EditText)this.findViewById(R.id.et_number_message);
etContentMessage = (EditText) this.findViewById(R.id.et_content_message);
Button btSendMessage = (Button) this.findViewById(R.id.bt_send_message);
btSendMessage.setOnClickListener(this);//发送短信监听按钮
}
@Override
public void onClick(View v){
switch (v.getId()){
case R.id.bt_send_message:
this.sendMessage();
break;
default:
break;
}
}
/**
* 发送短信
*/
public void sendMessage(){
String number = etNumberMessage.getText().toString().trim();
String content = etContentMessage.getText().toString().trim();
if(TextUtils.isEmpty(number) || TextUtils.isEmpty(content)){
Toast.makeText(this, "电话号码和短信信息不能为空", Toast.LENGTH_SHORT).show();
return;
}
SmsManager smsManager = SmsManager.getDefault();
//发送的内容只能有156字节,需要将短信内容截取,重复发送
ArrayList<String> contents = smsManager.divideMessage(content);
for (String divideContent : contents){
smsManager.sendTextMessage(number,null,divideContent,null,null);
}
}
}
(5)在"AndroidManifest.xml"配置文件中声明 Activity_Message 以及允许使用 SEND_SMS的权限。
在application标签中增加 Activity_Message声明
增加SEND_SMS权限<pre name="code" class="html"><span style="font-size:12px;"> <activity android:name="Activity_Message" android:label="@string/app_name"> </activity></span>
<span style="font-size:12px;"><uses-permission android:name="android.permission.SEND_SMS" /></span>
(6)测试。在AVD Manager打开另外一个虚拟器,测试发送到另外一个虚拟器是否可以发送