短信的收发及在android模拟器之间实践(4)

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跟上篇中的一样,这里不再累述。运行结果如下图:

image

图2、程序主界面

点击send按钮之后,转到内置的SMS客户端并且将我们输入的值传入了,如下图:

image

图3、内容传至内置SMS客户端

发送之后,5556号android模拟器会收到我们发送的消息,如下图:

image

图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的构建。

你可能感兴趣的:(android)