我的应用需要接收短信。到目前为止,它似乎适用于真实设备以及从Gingerbread到JellyBean的模拟器。我现在正在KitKat模拟器中测试它,并且不会触发广播接收器。
我正在使用经典短信操作在清单中注册接收器:
<receiver android:name=".receivers.MyReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
我还在清单中添加了SMS权限:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
我已经阅读了关于KitKat中SMS更改的blog post,他们说这个意图过滤器应该仍然有效:
现有应用中的SMS_RECEIVED_ACTION广播的任何过滤器将继续在Android 4.4上运行,但仅作为新消息的观察者,因为除非您的应用也接收SMS_DELIVER_ACTION广播,否则您无法写入SMS Android 4.4上的提供商。
这很好,因为我只需要收听新消息,我不需要我的应用程序成为默认的SMS应用程序,也不需要修改提供程序(这是一个非常简单的应用程序,没有活动,只有接收器和从接收方调用的服务。)
模拟器非常迟钝,所以我认为它可能只是模拟器的问题。太糟糕了我没有任何KitKat设备来测试它。现在我正在使用DDMS电话选项卡在KitKat中进行测试。我已经将日志记录添加到接收器,但我没有在logcat中看到任何内容。没有任何例外或任何其他可能表明存在问题的消息。看起来接收器没有被通知,但另一方面我已经仔细检查并安装了应用程序。
可能出现什么问题?
答案 0 :(得分:0)
正如@Seshu Vinai已在评论中指出,问题原来是security restriction introduced in Android 3.1。我认为事实并非如此,因为我之前在JellyBean设备和模拟器上测试了它,而且应用程序似乎有效。但它之所以这样做只是因为我之前已经在一些单元测试中启动了一个活动,因此应用程序被激活了。
您可以在以下问题中找到更多信息:
How to start a Service when .apk is Installed for the first time
Android BroadcastReceiver won't work
Android BroadcastReceiver not working after install
答案 1 :(得分:0)
除非您的应用是KITKAT中的默认应用,否则不会调用广播接收器。您将能够直接获取内容,但您将无法收听新消息。我有同样的问题。在我的应用程序默认后我知道了。
尝试将您的应用设为默认设置。你会发现差异。