Android基础教程之----SMS简单发送短信程序(两个模拟器之间的通信)!

http://blog.163.com/sikaodelang@126/blog/static/16410730020106814227513/

前面的范例,示范了如何通过程序拨打电话,在GSM移动通信系统的服务中,除了打电话外,另一个常用的功能,就是发短信.也因为如此,许多电信业者推出专属短信族的专用费率,由此可知短信功能对手机的重要性.

发送短信的关键程序是通过SmsManager对象的sendTextMessage()方法来完成,其中sendTextMessage()方法需传入五个值,依次是收件人地址(String),发送地址(String),发送服务(PendingIntent)与送达服务(PendingIntent),其中收件人与正文是不可为null的两个参数.

本例子通过两个模拟器,5554,5556互相通信,下面我将分5个步骤,讲一下发送短信程序是如何实现的.

Step 1:建立一个Android工程,我们命名为SMSDemo.

Step 2:设计一下程序的UI,也就是主界面main.xml,这里用AbsoluteLayout,有点丑见笑了!代码如下:

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  xmlns:android="http://schemas.android.com/apk/res/android"
  >
  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="收件 人:"
    android:textSize="16sp"
    android:layout_x="0px"
    android:layout_y="12px"
  >
  </TextView>
  <EditText
    android:id="@+id/myEditText1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text=""
    android:textSize="18sp"
    android:layout_x="60px"
    android:layout_y="2px"
  >
  </EditText>
  <EditText
    android:id="@+id/myEditText2"
    android:layout_width="fill_parent"
    android:layout_height="223px"
    android:text=""
    android:textSize="18sp"
    android:layout_x="0px"
    android:layout_y="52px"
  >
  </EditText>
  <Button
    android:id="@+id/myButton1"
    android:layout_width="162px"
    android:layout_height="wrap_content"
    android:text="发送短信"
    android:layout_x="80px"
    android:layout_y="302px"
  >
  </Button>
</AbsoluteLayout>

Step 3:主控制程序SMSDemo.java如下:

package com.android.test;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;

import android.os.Bundle;
import android.telephony.gsm.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class SMSDemo extends Activity {
   
 private Button mButton1;
 private EditText mEditText1;
 private EditText mEditText2;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //获取资源
        mEditText1 = (EditText)findViewById(R.id.myEditText1);
        mEditText2 = (EditText)findViewById(R.id.myEditText2);
        mButton1 = (Button)findViewById(R.id.myButton1);
        //发送短信的响应
        mButton1.setOnClickListener(new Button.OnClickListener(){

   public void onClick(View v) {
    //获取发送地址和发送内容
    String messageAddress = mEditText1.getText().toString();
    String messageContent = mEditText2.getText().toString();
    
    //构建一取得default instance的SmsManager对象
    
    SmsManager smsManager = SmsManager.getDefault();
    //检查输入内容是否为空,这里为了简单就没有判断是否是号码,短信内容长度的限制也没有做
    if(messageAddress.trim().length()!=0 && messageContent.trim().length()!=0)
    {
     try{
      PendingIntent pintent = PendingIntent.getBroadcast(SMSDemo.this, 0, new Intent(), 0);
      smsManager.sendTextMessage(messageAddress, null, messageContent, pintent, null);
      
     }catch(Exception e)
     {
      e.printStackTrace();
     }
     //提示发送成功
     Toast.makeText(SMSDemo.this, "发送成功", Toast.LENGTH_LONG).show();
    }
    else{
     Toast.makeText(SMSDemo.this, "发送地址或者内容不能为空", Toast.LENGTH_SHORT).show();
    }
   }
         
        });
    }
}

Step 4:增加拨打电话权限AndroidManifest.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.android.test"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".SMSDemo"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-sdk android:minSdkVersion="3" />
 <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
</manifest>


1.第一个模拟器,我们通过IDE编辑器—eclipse启动。

具体方法是:打开你的eclipse,随便运行一个项目。若是你的eclipse第一次使用,新建一个项目(譬如那个经典的“hello world”),然后运行它。Eclipse会帮你启动我们的第一个android模拟器。ID为5554.


2.  第二个模拟器,我们通过DOS命令启动。具体方法:“开始”-“运行”-“CMD”,确定或回车键。打开一个命令行窗口。然后cd 命令到你的android SDK目录的tools文件夹下面,

输入emulator -data foo 回车。稍等片刻,系统即可帮你启动又一个新的android模拟器。ID为5556.


好了,两个全新的模拟器我们已经启动完毕。最难的地方已经过去。现在来测试接打电话和收发短信。

二:测试收发短信:主界面上有“信息”菜单,没有的话在“主菜单”找。不要说你不知道菜单项在哪儿。

       启动发短信程序,可以看到发送短信界面。顶端一个输入框,输入你要发送短信的目的人的手机号(此处我们往另一个模拟器发送,输入另一个模拟器的ID号-5556),底部输入框,输入你要发送的内容,右下角有一“发送”按钮,输入成功后,点击“发送”,即可成功向另一模拟器发送你输入的内容。稍后,你便可在另一模拟器上看到提示信息,提示有新短信进入,发送方为“5554”。

       至于短信内容嘛,如果你发送的英文或者数字,可在另一模拟器上完全显示,但如果你发送的内容是汉字,则在接收方模拟器显示的则会是乱码。这个问题恐怕和android系统的底层文字编码有关。怎么解决,我现在还不知道。不过这种情况只会在模拟器上出现,真机上是不会出现汉字传输乱码的情况的。

发送方发送短信输入界面:


Step 5:run it!效果图如下,55545556发送了一条短信:

Android基础教程之----SMS简单发送短信程序(两个模拟器之间的通信)!_第1张图片 Android基础教程之----SMS简单发送短信程序(两个模拟器之间的通信)!_第2张图片



你可能感兴趣的:(Android基础教程之----SMS简单发送短信程序(两个模拟器之间的通信)!)