Android的短信消息发送报告的意图 [英] Android SMS Message delivery report intent

查看:133
本文介绍了Android的短信消息发送报告的意图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Android的未发送短信时发射的交付意图。我在Android 2.2的HTC EVO 4G测试这一点。

这是目前的code。我看到短信发送接收的意图。在日志中,而不是发送短信收到的意图。

  //常量
字符串SENT_ACTION =SMS_SENT_ACTION;
字符串DELIVERED_ACTION =SMS_DELIVERED_ACTION;
字符串CELL_NUMBER =0000000000;
字符串消息=的Hello World!;

//短信发送挂起的意图
PendingIntent sentIntent = PendingIntent.getBroadcast(此,0,
        新意图(SENT_ACTION),0);

//短信发送挂起的意图
PendingIntent deliveredIntent = PendingIntent.getBroadcast(此,0,
        新意图(DELIVERED_ACTION),0);

//短信发送接收器
registerReceiver(新BroadcastReceiver的(){
    @覆盖
    公共无效的onReceive(上下文的背景下,意图意图){
        Log.d(TAG,短信发送接收的意图。);
    }
},新的IntentFilter(SENT_ACTION));

//短信发送接收器
registerReceiver(新BroadcastReceiver的(){
    @覆盖
    公共无效的onReceive(上下文的背景下,意图意图){
        Log.d(TAG,短信发送意图接收。);
    }
},新的IntentFilter(DELIVERED_ACTION));

//发送短信
SmsManager的短信= SmsManager.getDefault();
sms.sendTextMessage(CELL_NUMBER,空,消息,sentIntent,deliveredIntent);
 

解决方案

要发送短信调用此方法

 私人字符串SIMSTATE =;
   私人字符串地址=; //收件人电话号码
   私人字符串消息=; //邮件正文

   私人无效sendSms()
   {
      如果(isSimExists())
        {

         尝试
         {

            字符串SENT =SMS_SENT;


        PendingIntent sentPI = PendingIntent.getBroadcast(此,0,新意图(SENT),0);

        registerReceiver(新BroadcastReceiver的()
        {
            @覆盖
            公共无效的onReceive(背景为arg0,意图ARG1)
            {
                INT结果code =的getResult code();
                开关(结果code)
                {
                 案例Activity.RESULT_OK:Toast.makeText(getBaseContext(),短信发送,Toast.LENGTH_LONG).show();
                                                               打破;
                案例SmsManager.RESULT_ERROR_GENERIC_FAILURE:Toast.makeText(getBaseContext(),一般故障,Toast.LENGTH_LONG).show();
                                                               打破;
                案例SmsManager.RESULT_ERROR_NO_SERVICE:Toast.makeText(getBaseContext(),无服务,Toast.LENGTH_LONG).show();
                                                               打破;
                案SmsManager.RESULT_ERROR_NULL_PDU:Toast.makeText(getBaseContext(),空的PDU,Toast.LENGTH_LONG).show();
                                                               打破;
                案例SmsManager.RESULT_ERROR_RADIO_OFF:Toast.makeText(getBaseContext(),无线电关,Toast.LENGTH_LONG).show();
                                                               打破;
                }
            }
        },新的IntentFilter(发送));

                   SmsManager的smsMgr = SmsManager.getDefault();
        smsMgr.sendTextMessage(地址,空,消息,sentPI,NULL);

                    }
         赶上(例外五)
         {
            Toast.makeText(这一点,e.getMessage()+!\ N+无法发送短信,Toast.LENGTH_LONG).show();
            e.printStackTrace();
         }
        }
        其他
        {
            Toast.makeText(这一点,SIMSTATE ++无法发送短信,Toast.LENGTH_LONG).show();
        }
   }



//对于接收短信

   类SMSReceiver扩展的BroadcastReceiver
{

    私有静态最后弦乐ACTION =android.provider.Telephony.SMS_RECEIVED;

    @覆盖
    公共无效的onReceive(上下文的背景下,意图意图)
    {
        如果(意向= NULL和放大器;!&安培;!intent.getAction()= NULL和放大器;&安培; ACTION.compareToIgnoreCase(intent.getAction())== 0)
        {
                    //短信收到code在这里
                 }
        }
}


注意:您必须指定a​​ndroid.permission.SEND_SMS和
    清单文件android.permission.RECEIVE_SMS权限和
       也接收器

    <接收机器人:SMSReceiver名称=机器人:启用=真正的>
            <意向滤光器>
                <作用机器人:名称=android.provider.Telephony.SMS_RECEIVED/>
            &所述; /意图滤光器>
        < /接收器>
 

AndroidManifest.xml中

 < XML版本=1.0编码=UTF-8&GT?;
<舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    包=com.tekeli.order
    安卓版code =1
    机器人:VERSIONNAME =1.0>

    <使用-SDK安卓的minSdkVersion =11/>
    <使用-权限的Andr​​oid:名称=android.permission.SEND_SMS>< /使用-许可>
    <应用
        机器人:图标=@可绘制/ ic_launcher
        机器人:标签=@字符串/ APP_NAME>
        <活动
            机器人:名称=。ActivityOrderActivity
            机器人:标签=@字符串/ APP_NAME>
            <意向滤光器>
                <作用机器人:名称=android.intent.action.MAIN/>

                <类机器人:名称=android.intent.category.LAUNCHER/>
            &所述; /意图滤光器>
        < /活性GT;
        <活动机器人:名称=B>< /活性GT;
         <活动机器人:名称=C>< /活性GT;
    < /用途>

< /舱单>
 

Android isn't firing the delivery intent when sending a text message. I'm testing this on Android 2.2 on the HTC EVO 4G.

This is the current code. I'm seeing "SMS sent intent received." in the logs, but not "SMS delivered intent received.".

// Constants
String SENT_ACTION = "SMS_SENT_ACTION";
String DELIVERED_ACTION = "SMS_DELIVERED_ACTION";
String CELL_NUMBER = "0000000000";
String MESSAGE = "Hello World!";

// SMS sent pending intent
PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0,
        new Intent(SENT_ACTION), 0);

// SMS delivered pending intent
PendingIntent deliveredIntent = PendingIntent.getBroadcast(this, 0,
        new Intent(DELIVERED_ACTION), 0);

// SMS sent receiver
registerReceiver(new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "SMS sent intent received.");
    }
}, new IntentFilter(SENT_ACTION));

// SMS delivered receiver
registerReceiver(new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "SMS delivered intent received.");
    }
}, new IntentFilter(DELIVERED_ACTION));

// Send the SMS message
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(CELL_NUMBER, null, MESSAGE, sentIntent, deliveredIntent);

解决方案

Call this method where you want to send Sms

   private String SimState = "";
   private String address=""; // Recipient Phone Number
   private String message=""; // Message Body

   private void sendSms()
   {
      if(isSimExists())
        {   

         try 
         {

            String SENT      = "SMS_SENT";


        PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);

        registerReceiver(new BroadcastReceiver() 
        {
            @Override
            public void onReceive(Context arg0, Intent arg1) 
            {
                int resultCode = getResultCode();
                switch (resultCode) 
                {
                 case Activity.RESULT_OK:                      Toast.makeText(getBaseContext(), "SMS sent",Toast.LENGTH_LONG).show();
                                                               break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:  Toast.makeText(getBaseContext(), "Generic failure",Toast.LENGTH_LONG).show();
                                                               break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:       Toast.makeText(getBaseContext(), "No service",Toast.LENGTH_LONG).show();
                                                               break;
                case SmsManager.RESULT_ERROR_NULL_PDU:         Toast.makeText(getBaseContext(), "Null PDU",Toast.LENGTH_LONG).show();
                                                               break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:        Toast.makeText(getBaseContext(), "Radio off",Toast.LENGTH_LONG).show();
                                                               break;
                }
            }
        }, new IntentFilter(SENT));

                   SmsManager smsMgr = SmsManager.getDefault();
        smsMgr.sendTextMessage(address, null, message, sentPI, null);

                    }
         catch (Exception e) 
         {
            Toast.makeText(this, e.getMessage()+"!\n"+"Failed to send SMS", Toast.LENGTH_LONG).show();
            e.printStackTrace();
         }
        }
        else
        {
            Toast.makeText(this, SimState+ " " + "Cannot send SMS", Toast.LENGTH_LONG).show();
        } 
   }



// For receiving sms

   class SMSReceiver extends BroadcastReceiver 
{

    private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";

    @Override
    public void onReceive(Context context, Intent intent)
    {
        if (intent != null && intent.getAction() != null && ACTION.compareToIgnoreCase(intent.getAction()) == 0) 
        {   
                    // Sms Received Your code here
                 }
        }
}


Note: You have to specify android.permission.SEND_SMS and
    android.permission.RECEIVE_SMS  permissions in manifest file and 
       also the receiver   

    <receiver android:name=".SMSReceiver"  android:enabled="true">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tekeli.order"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="11" />
    <uses-permission android:name="android.permission.SEND_SMS" ></uses-permission>
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".ActivityOrderActivity"
            android:label="@string/app_name">
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".B" ></activity>
         <activity android:name=".C"></activity>
    </application>

</manifest>

这篇关于Android的短信消息发送报告的意图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆