问题标签 [android-sms]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
495 浏览

android - BroadcastReceiver 不在发布模式下执行

我尝试在 Android 应用程序中实现请求短信验证,我的代码在调试中就像一个魅力,但是当我生成签名 apk 应用程序并将它作为发布运行时,我的 BroadcastReceiver 类似乎没有执行,我尝试了很多方法,比如将我的接收器定义为内部类活动,但仍然是同样的问题!

应用程序标签清单中的定义:

这是我的接收器类:

这是 SmsRetrieverClient 的初始化:

但我想知道接收器方法如何在调试中执行和烤面包“完成”,但在发布中没有!

0 投票
0 回答
296 浏览

android - Android ContentObserver-判断短信状态

我已将 a 注册ContentObserver到 的 URI Telephony.Sms.CONTENT_URI,以便在用户每次发送或接收新的 SMS 消息时得到通知。

对于成功发送和接收的消息,这工作正常 - 但对于发送失败的消息,我注意到一个意外行为:消息似乎被报告为好像它们已成功发送,即使它们不是 - 我不能找不到任何有关失败的迹象。

在 obeserver 的 onChange 函数中,我尝试根据消息类型确定消息状态,但我得到的只是Telephony.Sms.MESSAGE_TYPE_SENT(2) 的文件夹/类型和Telephony.Sms.STATUS_NONE(-1) 的状态,这两者都不表示发送有失败的。那是我使用的代码:

我还尝试在同一个函数中查询(使用 URI 的 URI Telephony.Sms.CONTENT_URI)来查找我以前从未见过的所有 SMS 消息,然后像前面的代码示例一样提取相同的字段 - 但结果将保持不变。

我还尝试查询应该返回具有特定状态的所有消息列表的特定 URI(如此处所列),但我一直得到一个空光标,不知道为什么:

(还尝试了其他附加路径,例如“失败”、“排队”、“发件箱”、“未交付”,所有这些都不起作用)。

顺便说一句,此代码仅在运行 Android 7.0 的三星 Galaxy A7 上进行了测试,当时默认消息传递应用程序是谷歌的Android 消息(不是与手机捆绑的三星消息传递应用程序),所以它可能会以某种方式影响结果,我不确定。

最重要的是,问题是 - 我如何检查消息是否已成功发送?(假设我不是发送它的人,因为那样我会收到一个回调,其中包含该特定尝试的状态)

0 投票
1 回答
54 浏览

android - Android 在什么情况下需要用户干预才能发送短信?

我正在开发一个应用程序,它将从前台服务发送非常罕见的 SMS 消息。如果应用程序没有被用户自己严重滥用,我们每年最多会谈论几次。

前几天我在一个真实的设备上测试了它,然后弹出一个对话框,上面说了些什么

我不记得确切的措辞,而且我无法重现它。我不会发誓,但我相当肯定它是在运行 Android 4.4.4 的设备上。

这是该应用程序第一次尝试在此设备上发送短信,所以我认为它与SmsUsageMonitor.isUnderLimit()无关。是否有其他安全检查适用于从前台服务发送短信(包括所有版本的 Android,而不仅仅是 4.4.4)?

SmsUsageMonitor似乎对“高级”号码进行了一些检查,并且可能需要某种形式的用户接受,以防应用程序尝试向这样的号码发送消息。如果是这种情况,有没有办法“预先批准”我的应用程序以一劳永逸地发送到任何号码 - 包括高级号码?或者将来是否仍需要手动用户批准,例如,如果使用新的收件人号码(可能是高级号码)?

0 投票
1 回答
57 浏览

java - 使用 SmsManager 从内部类发送短信不起作用

更新:如果我sendSms()在内部类之外使用函数,它就可以工作!但我需要它在里面。有人可以帮忙吗?

我正在尝试使用在背景中发送短信SmsManager,但没有任何反应。当我去 Logcat 它说:

E/art: Failed sending reply to debugger: Broken pipe

我已经在模拟器和真实设备上测试过了

这是一部分MainActivity.java

Toast 正在显示,我也打印了sendermessageText它打印了应该打印的内容,所以这不是问题。我一直在寻找这个错误,并试图清理项目、重建、退出 android,但没有任何效果。

我已在清单中包含 SEND_SMS 权限

0 投票
0 回答
281 浏览

android - 手机一段时间未使用时未触发 SMS BroadcastReceiver?

我有一个BroadcastReceiver在清单中注册的应用程序

当我测试它时它一直工作得很好,但今天我尝试向安装了我几个小时没有碰过的应用程序的手机发送短信。该应用程序在测试之前在这款手机上运行良好,但我总是在显示屏打开或锁定屏幕后几分钟内对其进行测试。

BroadcastReceiver当我几个小时没有使用手机时,似乎我今天没有被触发。收到短信并触发了股票消息应用程序,但我的 BroadcastReceiver 没有被触发(或者至少,我开始的前台服务onReceive()没有启动)。

有问题的手机是运行 Android 4.4.4 的摩托罗拉 Moto G。

编辑

当我在应该触发广播接收器几分钟后通过 USB 连接手机时,我只看到两个与我的应用程序相关的日志:

这是(我认为)收到短信时的完整日志(我在上面的两行前面加上了###):

0 投票
0 回答
193 浏览

java - 在发送自动 SMS 之前显示“花钱的 SMS 服务”对话框

我的应用程序的核心逻辑是从即将发送的 SMS 中检测特定关键字,然后如果它匹配某个条件,它将向指定的收件人发送自动 SMS,Switch如果激活该应用程序有一个视图,它将收听所有传入的 SMS。

我已经完成了所有必要的许可请求,例如。

问题是每次应用程序匹配某些条件并且它即将发送一条短信时,它都会显示一个对话框。

带有正面和负面按钮的“花钱的短信服务”

我绝对确定该对话框不是权限,而更像是系统默认设置。

它破坏了应用程序的逻辑,因为它应该在匹配特定关键字时自动发送一条短信,从而导致糟糕的用户体验,我认为这只会在 API 版本低于 API 23 时显示一个对话框(我可能是错的)。

现在有什么方法可以要求用户授予应用程序访问权限以在应用程序即将发送自动短信之前始终发送短信?

0 投票
0 回答
423 浏览

android - 新 SMS Retriever API 的延迟广播响应

最近我们决定开始使用SMS Retriever API来读取 OTP。我遵循了所有步骤,它工作正常

问题是在长时间延迟后BroadcastReceiver得到回调。系统在实际收到短信后立即推送短信通知。但是,接收者会在差不多一分钟后得到它。

在三星 J3 上进行了测试。安卓 6.0.1,播放服务 14.5.81。

有人遇到过这个问题吗?是否存在接收器优先级问题或 API 的任何其他限制?

0 投票
8 回答
11110 浏览

android - 为什么 SMS Retriever API 在发布模式下不起作用?

我已经SMS Retriever API在谷歌教程和我的调试 Build Variant 中实现了类似的工作。我可以阅读短信并将代码发送给用户可以登录。

我的问题是当我在 release Build Variant 中运行应用程序时,它不起作用。我收到了短信,但我无法读取登录代码。

我在发布模式下更改了AppSignatureHelper生成的哈希,这与调试模式不同。在调试工作和版本号中。

一些帮助将不胜感激

编码:

显现:

在我的课程中:(在发布和调试模式下,代码会抛出 onSucess 方法)此方法在onCreate中调用。

我的接收器:

我的 smsReceiver 方法:

0 投票
0 回答
63 浏览

android - SMS 权限在 API 27 及更高版本上取消检查自身

我在 Android API 27 及更高版本上有一个奇怪的问题。我有一个用于我们消防部门的应用程序,它会检查每条收到的短信,如果发件人是指定的号码,就会对其做出反应。(我们使用短信报警,这个应用程序必须在每次短信报警时启动并开始做事)。一切都适用于 android 版本 26 及更低版本。但对于更高版本,应用程序会在几个小时后停止读取收到的短信。我需要去应用程序权限手动禁用和重新启用短信权限,然后它又可以工作几个小时了!!啊啊啊

我有一个带有 onReceive 函数的 BroadcastReceiver 类,我在 Manifest 中声明了它。

使用以下代码询问权限:

我在这里做错了什么?

非常感谢您的投入!

0 投票
0 回答
39 浏览

android - 无法准确记录 Android 的多个背靠背 SMS 传递意图

我正在开发一个 android 应用程序,它几乎同时向同一个号码快速发送多条 SMS 消息(请注意,这是出于研究目的)。我需要这个应用程序来跟踪它的交付意图,我通过添加一个包含我希望该意图携带的信息的包来做到这一点。但是,我遇到的问题如下:

  • 如果我不使用未决意图标志(又名 0)或 FLAG_IMMUTABLE,则捆绑包值始终与发送的第一条消息相同,并且我会得到所有已发送消息的转储。
  • 如果我使用 FLAG_UPDATE_CURRENT,我会得到一个偶尔/随机更新的包值(多个意图包含相同的包值),并且我会得到所有传递的消息的转储。
  • 如果我使用 FLAG_ONE_SHOT,我会得到准确的捆绑包值(应该接收到的值),但我只会得到非常少量的意图转储,即使该数量仍然很小(~1%)我碰巧连续发送了 1000 多条消息。

以下是MainActivity中负责发送 SMS 的消息发送方法部分:

然后,在我想要的任何地方(无论是在新应用程序中还是在当前应用程序中),我都输入以下内容来注册我的接收器类。

最后,我的广播接收器类SmsDeliveredReciever

请注意,SendIntent 也会发生完全相同的事情。我已经阅读了所有的 Google Android SDK 文档,到目前为止,stackoverflow 提供的答案仅适用于警报/警报而不适用于 SMS 意图,其中唯一现有的 SMS 教程和论坛条目是单发送 SMS。不,我不是要发送多部分消息

期望的输出

  1. 所有 SMS 传递意图都应在广播接收器中捕获
  2. 捕获的每个意图都必须通过捆绑输出其自己的唯一消息关联号。
  3. 捕获的意图数量应该等于成功发送的消息数量(是的,我确实有办法检查是否收到消息)

这个期望的输出是否可能,或者我对 Android 的要求太多了?接收器是否是一个单独的应用程序对我来说并不重要,尽管它是一个单独的应用程序是首选。

注意:除了准确跟踪/记录发送/传递的意图外,应用程序中的所有内容均正常运行且无错误。