【问题标题】:Send SMS message using non default SMS app on Android 4.4在 Android 4.4 上使用非默认 SMS 应用发送 SMS 消息
【发布时间】:2025-12-17 12:25:01
【问题描述】:

我可以在 Android 4.4 Kitkat 上不使用默认短信应用发送短信吗?

意思是,我可以在没有能力写入 SMS Provider 的情况下发送 SMS 吗?

我在 Android 4.4 Kitkat 上对此感到困惑。

我想知道我是否可以使用非默认短信应用发送短信。

【问题讨论】:

标签: android sms android-4.4-kitkat


【解决方案1】:

即使您的应用不是默认的短信应用,您也可以发送短信。

但是,您将无法使用 SMS 提供商。

这就是新版本的重点——让用户清楚地知道哪个应用可以使用特殊的短信操作,并且只有一个默认应用。

看看这段文字(取自android developer blog):

考虑到一些不想表现得像 默认 SMS 应用程序但仍要发送消息,任何具有 SEND_SMS 权限仍然可以使用发送 SMS 消息 短信管理器。当且仅当应用程序未被选为默认 SMS 安卓4.4应用,系统自动写入发送的短信 向 SMS 提供者发送消息(默认 SMS 应用程序始终为 负责将其发送的消息写入 SMS Provider)。

所以,简而言之,如果您只需要发送和接收短信,您仍然可以做到。

但是,某些操作要求您将应用作为默认 SMS 应用。

【讨论】:

  • 那是...如果它没有能力写入SMS Provider,它就不能发送SMS 消息,好吗?那么,不使用默认短信应用发送短信会发生安全异常...?
  • 我已经更新了答案。似乎您可以做一些 SMS 的基本操作,但有些操作要求您的应用程序是默认应用程序,如果是这种情况(使用“Telephony.Sms.getDefaultSmsPackage()”检查),您应该禁用您的某些功能应用程序。
  • 另外,关于您的问题,我认为默认应用程序负责写入 SMS Provider,但其他应用程序仍然可以发送 SMS。
  • @androiddeveloper 那么写到收件箱怎么样?我的应用程序会在下面失败吗? ContentValues 值 = 新 ContentValues(); values.put("日期", System.currentTimeMillis()); values.put("地址", 发件人); values.put("body", msg); getContentResolver().insert(Uri.parse("content://sms/inbox"), values);
  • @NitZRobotKoder 是的,正如我所写和文档中所说的那样。只有默认的 SMS 应用程序可以写入提供商。但是,其他应用程序仍然可以使用普通权限发送和接收短信并执行一些特定的基本操作。
【解决方案2】:

你可以试试这个代码:

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

PendingIntent deliveredPI = PendingIntent.getBroadcast(context, 0, new Intent(DELIVERED), 0);

android.telephony.SmsManager.getDefault().sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);

在清单中:

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

如果发送号码不是 4、5、6 位,则不需要用户确认。

【讨论】: