`
nanjingjiangbiao_T
  • 浏览: 2739590 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Android--判断发送短信后的状态/发送成功Or发送失败

 
阅读更多

相信用过诺基亚手机的朋友可能会记得,在短信发送之后,手机会显示发送手机的状态,Android同样也提供了相应的功能,而且实现这个功能的方法也很简单。

首先,我们需要在程序中注册两个权限:

1.接收短信的权限

2.发送短信的权限

  <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
  <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

之后,我们需要开启两个模拟器测试程序的功能,下面是实现的截图,首先看第一张截图,是一个模拟器接收到另一个模拟器发送来的短信显示在通知栏里:


我们会看到这个模拟器的端口号叫做5554,这个就相当于手机号,我们发送短信只要把这个号码当做是手机号使用即可,下面这张截图是主程序的实现截图,点击发送按钮,短信被发出,同时,如果成功,系统会发送广播信息。

截图如下:


下面给出程序的实现代码:

public class EX06_14 extends Activity
{
  /* 建立两个mServiceReceiver对象,作为类成员变量 */
  private mServiceReceiver mReceiver01, mReceiver02;
  private Button mButton1;
  private TextView mTextView01;
  private EditText mEditText1, mEditText2;
  
  /* 自定义ACTION常数,作为广播的Intent Filter识别常数 */
  private static String SMS_SEND_ACTIOIN = "SMS_SEND_ACTIOIN";
  private static String SMS_DELIVERED_ACTION = "SMS_DELIVERED_ACTION";
    
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    mTextView01 = (TextView)findViewById(R.id.myTextView1);
    
    /* 电话号码 */
    mEditText1 = (EditText) findViewById(R.id.myEditText1);
    
    /* 短信内容 */
    mEditText2 = (EditText) findViewById(R.id.myEditText2);
    
    mButton1 = (Button) findViewById(R.id.myButton1);
    
    //mEditText1.setText("+886935123456");
    /* 设定预设为5556表示第二个模拟器的Port */
    mEditText1.setText("5556");
    mEditText2.setText("Hello DavidLanz!");
    
    /* 发送SMS短信按钮事件处理 */
    mButton1.setOnClickListener(new Button.OnClickListener()
    {
      @Override
      public void onClick(View arg0)
      {
        // TODO Auto-generated method stub
        
        /* 欲发送的电话号码 */
        String strDestAddress = mEditText1.getText().toString();
        
        /* 欲发送的短信内容 */
        String strMessage = mEditText2.getText().toString();
        
        /* 建立SmsManager对象 */
        SmsManager smsManager = SmsManager.getDefault();
        
        // TODO Auto-generated method stub
        try
        {
          /* 建立自定义Action常数的Intent(给PendingIntent参数之用) */
          Intent itSend = new Intent(SMS_SEND_ACTIOIN);
          Intent itDeliver = new Intent(SMS_DELIVERED_ACTION);
          
          /* sentIntent参数为传送后接受的广播信息PendingIntent */
          PendingIntent mSendPI = PendingIntent.getBroadcast(getApplicationContext(), 0, itSend, 0);
          
          /* deliveryIntent参数为送达后接受的广播信息PendingIntent */
          PendingIntent mDeliverPI = PendingIntent.getBroadcast(getApplicationContext(), 0, itDeliver, 0);
          
          /* 发送SMS短信,注意倒数的两个PendingIntent参数 */
          smsManager.sendTextMessage(strDestAddress, null, strMessage, mSendPI, mDeliverPI);
          mTextView01.setText(R.string.str_sms_sending);
        }
        catch(Exception e)
        {
          mTextView01.setText(e.toString());
          e.printStackTrace();
        }
      }
    });
  }
  
  /* 自定义mServiceReceiver重写BroadcastReceiver监听短信状态信息 */
  public class mServiceReceiver extends BroadcastReceiver
  {
    @Override
    public void onReceive(Context context, Intent intent)
    {
      // TODO Auto-generated method stub
      
      //mTextView01.setText(intent.getAction().toString());
      if (intent.getAction().equals(SMS_SEND_ACTIOIN))
      {
        try
        {
          /* android.content.BroadcastReceiver.getResultCode()方法 */
          //Retrieve the current result code, as set by the previous receiver.
          switch(getResultCode())
          {
            case Activity.RESULT_OK:
              /* 发送短信成功 */
              //mTextView01.setText(R.string.str_sms_sent_success);
              mMakeTextToast
              (
                getResources().getText(R.string.str_sms_sent_success).toString(),
                true
              );
              break;
            case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
              /* 发送短信失败 */
              //mTextView01.setText(R.string.str_sms_sent_failed);
              mMakeTextToast
              (
                getResources().getText(R.string.str_sms_sent_failed).toString(),
                true
              );
              break;
            case SmsManager.RESULT_ERROR_RADIO_OFF:
              break;
            case SmsManager.RESULT_ERROR_NULL_PDU:
              break;
          }        
        }
        catch(Exception e)
        {
          mTextView01.setText(e.toString());
          e.getStackTrace();
        }
      }
      else if(intent.getAction().equals(SMS_DELIVERED_ACTION))
      {
        try
        {
          /* android.content.BroadcastReceiver.getResultCode()方法 */
          switch(getResultCode())
          {
            case Activity.RESULT_OK:
              /* 短信 */
              //mTextView01.setText(R.string.str_sms_sent_success);
              mMakeTextToast
              (
                getResources().getText(R.string.str_sms_rec_success).toString(),
                true
              );
              break;
            case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
              /* 短信未送达 */
              //mTextView01.setText(R.string.str_sms_sent_failed);
              mMakeTextToast
              (
                getResources().getText(R.string.str_sms_rec_failed).toString(),
                true
              );
              break;
            case SmsManager.RESULT_ERROR_RADIO_OFF:
              break;
            case SmsManager.RESULT_ERROR_NULL_PDU:
              break;
          }        
        }
        catch(Exception e)
        {
          mTextView01.setText(e.toString());
          e.getStackTrace();
        }
      }      
    }
  }
  
  public void mMakeTextToast(String str, boolean isLong)
  {
    if(isLong==true)
    {
      Toast.makeText(EX06_14.this, str, Toast.LENGTH_LONG).show();
    }
    else
    {
      Toast.makeText(EX06_14.this, str, Toast.LENGTH_SHORT).show();
    }
  }
  //这是重载Activity中的函数
  @Override
  protected void onResume()
  {
    // TODO Auto-generated method stub
    
    /* 自定义IntentFilter为SENT_SMS_ACTIOIN Receiver */
    IntentFilter mFilter01;
    mFilter01 = new IntentFilter(SMS_SEND_ACTIOIN);
    mReceiver01 = new mServiceReceiver();
    registerReceiver(mReceiver01, mFilter01);
    
    /* 自定义IntentFilter为DELIVERED_SMS_ACTION Receiver */
    mFilter01 = new IntentFilter(SMS_DELIVERED_ACTION);
    mReceiver02 = new mServiceReceiver();
    registerReceiver(mReceiver02, mFilter01);
    
    super.onResume();
  }
  
  @Override
  protected void onPause()
  {
    // TODO Auto-generated method stub
    
    /* 取消注册自定义Receiver */
    unregisterReceiver(mReceiver01);
    unregisterReceiver(mReceiver02);
    
    super.onPause();
  }
}


分享到:
评论

相关推荐

    Android-判断发送短信后的状态/发送成功Or发送失败

    这篇教程将详细介绍如何在Android应用中监听并判断短信发送后的情况。 首先,我们需要了解Android系统提供的 SMSManager 类,它是处理短信发送的核心组件。通过 SMSManager,我们可以发送短信、设置监听器来获取...

    安卓发送Exchange邮件jar包:ews-android-api.jar

    安卓发送Exchange邮件,引用ews-android-api.jar和joda-time-2.8.jar两个包。 用法: ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); ExchangeCredentials credentials = new ...

    Android 实现发短信 监听短信发送状态

    在Android平台上,开发人员可以利用系统的短信服务API来实现发送短信以及监听短信发送的状态。这一功能对于构建一些需要确认信息传递的应用,如验证码发送、通知提醒等,是至关重要的。以下将详细介绍如何在Android...

    Android项目实战--手机卫士10--GPS定位与发送短信指令

    Android项目实战--手机卫士10--GPS定位与发送短信指令

    android-sms短信发送

    这个【android-sms短信发送】项目旨在教你如何在虚拟环境中实现一个完整的短信发送流程。以下是对这一知识点的详细阐述: 1. **短信API使用**: Android系统提供了一个名为`SmsManager`的类,它是用于发送和接收...

    Android工程源代码-手机短信发送

    7. **BroadcastReceiver**: 在某些情况下,可能需要监听短信发送的状态,比如成功、失败或者被阻止。这时,可以创建一个`BroadcastReceiver`,注册对`SMS_SENT`和`SMS_DELIVERED`广播的监听,以处理这些状态。 8. *...

    Android如何实现接收和发送短信

    每一部手机都具有短信接收和发送功能,下面我们通过代码来实现接收和发送短信功能。  一、接收短信 1、创建内部广播接收器类,接收系统发出的短信广播 2、从获得的内容中解析出短信发送者和短信内容 3、在...

    android-support-v4-v7-v13-v14-v17(官方最新完整版)

    android-support-v4-v7-v13-v14-v17(官方最新完整版),官方最新版的,压缩包内包含android-support-v4、android-support-v7-appcompat,android-support-v7-cardview,android-support-v7-gridlayout,android-support-...

    Android之发送短信的两种方式

    对于第二种方法,由于短信发送是由用户触发的系统短信应用完成的,因此监听发送状态较为复杂,通常只能在用户确认发送后进行一些后续操作,而无法实时获取发送状态。 在实现以上功能时,还需要注意以下几点: - ...

    mips64el-linux-android-4.9

    android-ndk-r12b\toolchains下的编译平台 android-ndk-r12b\toolchains\mips64el-linux-android-4.9 android-ndk-r12b\toolchains\mipsel-linux-android-4.9

    监控android短信发送状态

    在Android平台上,对短信发送状态进行监控是一项常见的需求,例如为了跟踪消息是否成功发送、接收确认或者实现自动化操作。在Android系统中,我们可以通过监听`BroadcastReceiver`来捕获短信的相关事件。本教程将...

    Android应用源码之自动发送短信.zip

    这里,`sendTextMessage()`方法接收四个参数:接收方电话号码、短信内容、发送成功的PendingIntent、发送失败的PendingIntent和额外的数据。若不需监听发送状态,可以传入null。 为了确保用户已经授予了发送短信的...

    android-sdk\platforms\android-21

    在Android开发领域,`android-21`是一个重要的版本,代表了Android操作系统的API级别21,也称为Android Lollipop(5.0)。这个版本带来了许多显著的变化和更新,为开发者提供了新的特性和功能。下面将详细介绍`...

    安卓开发之串口通信android-serialport-api-master

    另外关于它的使用,下载解压后直接将android-serialport-api-master\android-serialport-api\project导入eclipse,运行后点击设置,即可设置设备和波特率,点击发送和接收数据后,在emission输入框里面输入内容后...

    【Android】短信发送

    这个接收器会在短信发送成功、失败或者被用户取消时接收到相应的广播。 ```java public class SmsSendReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) {...

    Android代码-自动发送短信.zip

    在实际开发中,为了提高用户体验,可能会添加额外的逻辑,比如在用户没有授予发送短信权限时提示用户,或者在发送失败后提供重试选项。此外,对于批量发送,可能需要考虑延迟发送以避免被运营商视为垃圾短信。 在...

    Android 获取系统联系人并发送短信demo

    5. **处理发送状态**:可以通过BroadcastReceiver监听短信的发送状态,如成功、失败或部分成功。 在实际应用中,这两个功能都需要考虑到用户体验,比如处理用户权限拒绝的情况,显示加载进度,以及错误处理等。同时...

    Android手机后台发送短信

    在这个例子中,`"接收者电话号码"`是目标手机的电话号码,`"短信内容"`是你想要发送的文本,后面的两个参数通常用于设置发送成功的回调和失败的回调,这里我们用null表示不设置。 在后台发送短信,需要注意的是,...

    Android发送短信程序

    - `sentIntent`: 用于接收发送结果的BroadcastReceiver Intent,当短信发送成功或失败时将被触发。 - `deliveryIntent`: 用于接收送达结果的BroadcastReceiver Intent,当短信被接收方接收后将被触发。 #### 三、...

    安卓短信彩信相关相关-android零权限发送短信支持android4.0以上版本。.rar

    在Android平台上,短信和彩信服务是通信功能的重要组成部分,它们允许用户在应用程序中发送文本消息和多媒体消息。本文将详细探讨"安卓短信彩信相关——Android零权限发送短信支持android 4.0以上版本"这个主题,...

Global site tag (gtag.js) - Google Analytics