2015-04-23 76 views
-1

我已经创建了以下方法来打开设备的默认短信应用程序并预​​先填充消息和(可选)电话号码。从默认短信应用程序获取短信活动结果

我想知道的是如何获得从SMS活动返回的RESULT_OK只有当SMS已发送?目前,当我退出短信活动时,我会收到RESULT_CANCELLED,因为我可能会期望。

是否有一种简单的方法来确定是否在返回到我的应用程序时发送短信?

public static void sendSMS(Activity activity, String message, String phoneNumber){ 

     boolean hasPhoneNumber = phoneNumber != null; 

     if(message == null){ 
      showSMSError(activity, null); 
      return; 
     } 

     Intent smsIntent; 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){ 
      smsIntent = new Intent(Intent.ACTION_SENDTO); 
      //Ensures only SMS apps respond 
      smsIntent.setData(Uri.parse("smsto:" + (hasPhoneNumber ? phoneNumber : ""))); 
      //No resolvable activity 
      if (smsIntent.resolveActivity(activity.getPackageManager()) == null) { 
       showSMSError(activity, null); 
       return; 
      } 
     }else{ 
      //Old way of accessing sms activity 
      smsIntent = new Intent(Intent.ACTION_VIEW); 
      smsIntent.setType("vnd.android-dir/mms-sms"); 
      if(hasPhoneNumber) { 
       smsIntent.putExtra("address", phoneNumber); 
      } 
      smsIntent.putExtra("exit_on_sent", true); 
     } 
     smsIntent.putExtra("sms_body", message); 
     activity.startActivityForResult(smsIntent, SMS_ACTIVITY_REQUEST); 
    } 

回答

2

我想知道什么是我能得到一个RESULT_OK从SMS活动返回只有当短信已发送?

自己写的短信客户端应用程序,它在支持startActivityForResult()的方式实现其ACTION_SENDTOACTION_VIEW活动(或活动)。这些Intent操作没有记录为有结果,这就是为什么现有的SMS客户端很少(如果有的话)会设置结果的原因。

+0

只是为了确保我站在你的答案,你的意思是通过使用'SMSManager'的应用程序发送短信? –

+0

@EdGeorge:这将是知道短信是否被发送的更有效方式。第三方SMS客户端不会返回结果,因为文档说他们不应该返回结果,并且不能更改结果。 – CommonsWare