【问题标题】:Using the native sms app to send an sms without launching itself使用本机短信应用程序发送短信而不启动自身
【发布时间】:2012-10-05 08:07:00
【问题描述】:

我想发送短信,但不使用 SmsManager 类。我想使用 Android 手机上的原生 SMS 应用程序来实现。

这是一个转折点:我不想在执行此操作时启动本机应用程序。是否有某种格式的意图可以通过本机应用程序直接发送短信(给定短信正文和要发送到的电话号码)(用户无需单击“发送”)。

我用谷歌搜索过,但所有结果和响应都只是启动了原生短信,等待用户手动发送短信。我已经看到这在一些应用程序中实现,例如“MightyText”,并希望在我的应用程序中实现。

请帮忙!

【问题讨论】:

    标签: android android-intent sms


    【解决方案1】:

    试试这个:

    String phoneNo = textPhoneNo.getText().toString();
    String sms = textSMS.getText().toString();
    
    
    
    try {
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(phoneNo, null, sms, null, null);
        Toast.makeText(getApplicationContext(), "SMS Sent!",
            Toast.LENGTH_LONG).show();
    } catch (Exception e) {
        Toast.makeText(getApplicationContext(),
            "SMS faild, please try again later!",
            Toast.LENGTH_LONG).show();
        e.printStackTrace();
    }
    

    【讨论】:

      【解决方案2】:

      使用 SmsManager 将通过系统发送短信,但不会像前面提到的那样将其放入短信内容提供程序中。因此,任何原生消息传递应用程序都不会看到它。

      为此,您必须在通过 SmsManager 正常发送消息后通过 SMS 内容提供商手动添加它。这里有一些示例代码可以提供帮助:

      ContentValues values = new ContentValues();
      values.put("address", "+12345678"); // phone number to send
      values.put("date", System.currentTimeMillis()+""); 
      values.put("read", "1"); // if you want to mark is as unread set to 0
      values.put("type", "2"); // 2 means sent message
      values.put("body", "This is my message!");
      
      Uri uri = Uri.parse("content://sms/");
      Uri rowUri = context.getContentResolver().insert(uri,values);
      

      仅此而已。之后,您会注意到它已添加,并且本机消息传递应用程序正常显示它。

      如果对你有用,请点击“接受”答案。

      【讨论】:

      • 只是想添加到 wnafee 的答案中,此代码还需要将 android.permissions.READ_SMS / android.permissions.WRITE_SMS 添加到清单中,并且代码的作用就像一个魅力!谢谢wnafee。
      【解决方案3】:

      好的,所以您想在不使用 SmsManager 的情况下发送短信,而且它应该显示在您的原生短信应用列表中?

      首先,您不能绕过SmsManager发送短信。如果您查看三星 Galaxy Nexus 的所有原生消息传递应用程序的源代码,它将在按钮单击时调用 SmsManager。

      所以,上面发布的以下代码是正确的

      SmsManager sms = SmsManager.getDefault();
      sms.sendTextMessage(phoneNumber, null, message, null, null);
      

      其次,发送消息后,原生应用将其放入SMS ContentProvider

      关注这个How to save SMS to inbox in android?

      请注意,现在不支持添加此内容。因此,您可能不得不求助于黑客将其添加到已发送的框中。

      【讨论】:

        【解决方案4】:

        我在我正在从事的项目中做过类似的事情。你需要使用SmsManager

        应该是这样的——

                SmsManager smsManager = SmsManager.getDefault();
        
                smsManager.sendTextMessage(phoneNumber, null, message, null, null);
        

        您可以使用它以编程方式发送 SMS。

        【讨论】:

        • 它会在原生应用中记录我的短信吗?
        • 不,发送的消息不会显示在本机应用程序中。可能有办法,但我不确定。
        • 这就是我不想使用 smsManager 的原因,如果我为发送的消息构建自己的 UI 会很好,但它超出了我的应用程序的范围。因此,我的问题的第一行。
        • 所以我尝试投反对票?从人们那里获得答案的好方法。
        • 我认为您因未阅读问题而投了反对票(但您没有从我这里得到)
        【解决方案5】:

        如果你只有ACTION_SENDTO,那么当然会弹出任何可以发送的应用程序。

        您需要为短信添加过滤器

        【讨论】:

        • 感谢您在这里发布第一个建设性的答案。我已经在使用 URL 过滤器了。我也尝试使用内容类型进行过滤,但它仍然会弹出选择器。问题是,我看到一个应用程序跳过了我手机上的选择器直接使用本机短信应用程序,所以我很肯定可以做到这一点。
        猜你喜欢
        • 2012-12-21
        • 2016-07-03
        • 1970-01-01
        • 1970-01-01
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多