9、另一种发送短信的方式:使用Intent上篇 我们使用SmsManager类实现了发送SMS的功能,且并没有用到内置的客户端。实际上,我们很少这样做,自己在应用程序中去完全实现一个完整的SMS客户端。相反我们会去利用它,将需要发送的内容和目的手机号传递给内置的SMS客户端,然后发送。 下面我就向大家介绍如何利用Intent实现利用将我们的东西传递给内置SMS客户端发送我们SMS。为了实现这个功能,就要用到 startActivity("指定一个Intent") 方法,且指定Intent的动作为 Intent.ACTION_SENDTO ,用 sms: 指定目标手机号,用 sms_body 指定信息内容。java源文件如下所示:
package
skynet.com.cnblogs.www;
import
android.app.Activity;
import
android.content.Intent;
import
android.net.Uri;
import
android.os.Bundle;
import
android.view.View;
import
android.widget.Button;
import
android.widget.EditText;
import
android.widget.Toast;
public
class
TextMessage
extends
Activity {
/** Called when the activity is first created. */
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnSend = (Button) findViewById(R.id.btnSend);
edtPhoneNo = (EditText) findViewById(R.id.edtPhoneNo);
edtContent = (EditText) findViewById(R.id.edtContent);
btnSend.setOnClickListener(
new
View.OnClickListener() {
public
void
onClick(View v) {
String phoneNo = edtPhoneNo.getText().toString();
String message = edtContent.getText().toString();
if
(phoneNo.length() > 0 && message.length() > 0) {
Intent smsIntent=
new
Intent(Intent.ACTION_SENDTO, Uri.parse("
sms:
"+edtPhoneNo.getText().toString())); smsIntent.putExtra("
sms_body
", edtContent.getText().toString()); TextMessage.
this
.startActivity(smsIntent);
}
else
Toast.makeText(getBaseContext(),
"
Please enter both phone number and message.
",
Toast.LENGTH_SHORT).show();
}
});
}
private
Button btnSend;
private
EditText edtPhoneNo;
private
EditText edtContent;
}
注意代码中的红色粗体部分,就是实现这个功能的核心代码!布局文件maim.xml和值文件string.xml跟上篇中的一样,这里不再累述。运行结果如下图: 图2、程序主界面 点击send按钮之后,转到内置的SMS客户端并且将我们输入的值传入了,如下图: 图3、内容传至内置SMS客户端 发送之后,5556号android模拟器会收到我们发送的消息,如下图: 图5、发送之后5556号android模拟器收到消息 10、增强SMS为MMS我们讲了这么多,都还只是实现了简单的发生SMS的功能,如果我们想发送图片、音频怎么办(⊙o⊙)?不急,现在我们就将第9节介绍的SMS发送程序改造为MMS。 我们可以附加一个文件到我们的消息做为附件发送,用 Intent.EXTRA_STREAM 和附件资源的Uri做为参数调用 putExtra() 方法,附加到信息。并设置Intent的类型为 mime-type 。 要注意的是:内置的MMS并不包括一个 ACTION_SENDTO 动作的Intent接收器,我们需要使用的动作类型是 ACTION_SEND ,并且目标手机号不在是使用 sms: 而是 address 。 主要代码如下: // Get the URI of a piece of media to attach. Uri attached_Uri = Uri.parse(" content://media/external/images/media/1 "); // Create a new MMS intent Intent mmsIntent = new Intent(Intent.ACTION_SEND, attached_Uri); mmsIntent.putExtra(" sms_body ", edtContent.getText().toString()); mmsIntent.putExtra(" address ", edtPhoneNo.getText().toString()); mmsIntent.putExtra(Intent.EXTRA_STREAM, attached_Uri); mmsIntent.setType(" image/png "); startActivity(mmsIntent);
将这段代码替换第9节中的红色粗体代码,就完成而来一个MMS的构建。 |