【发布时间】:2013-11-24 12:44:54
【问题描述】:
我查看了使您的应用成为默认短信客户端 (found here) 的示例代码,该示例项目在运行 4.4 的 Nexus 4 上运行良好。有一个按钮,点击后会执行以下操作:
Intent intent = new Intent(Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Intents.EXTRA_PACKAGE_NAME, context.getPackageName());
context.startActivity(intent);
这会使“更改短信应用程序”对话框出现,允许用户切换他们的默认短信应用程序。
当我在我的 Nexus 7(2012,Wifi)上运行完全相同的项目时,按钮什么也不做,尽管我可以在 Logcat 中读取意图启动。同样的事情发生在我检查过的 Nexus 7 2013 wifi 型号上。
我尝试从市场上下载一些短信应用程序,所有这些应用程序都发生了完全相同的事情。它们在我的 N4 中工作得很好,在我的 N7 中没有运气。
有人遇到同样的问题吗?他们是否切断了将消息写入整体无法发送文本的设备的功能?
编辑:刚刚注意到Telephony 文档写道:
注意:这些 API 并非在所有 Android 设备上都可用。如果您的应用依赖于电话功能(例如管理 SMS 消息),请在清单中包含一个元素,声明“android.hardware.telephony”硬件功能。或者,您可以在运行时使用 hasSystemFeature(PackageManager.FEATURE_TELEPHONY) 或 getPhoneType() 检查电话可用性。
所以,我猜如果设备没有上述功能,它就无法“管理短信”(作为默认短信应用)。
【问题讨论】:
-
由于那些 Nexus 7 不能发送短信,如果它们是仅 WiFi 的,我不太确定你期望发生什么。
-
我想知道,尽管您实际上不能“发送”消息,但您是否仍然可以使用 Content Provider 并在设备中写入消息。
-
我不确定提供者是否存在;我没有在仅支持 WiFi 的设备上寻找它。您可以运行一个测试,看看您是否可以使用
ContentResolver或Loader读取它。如果失败并出现某种 provider-not-found 错误,则设备没有该提供程序。但是,如果它成功了,那么我不太确定发生了什么,好像它已记录并存在,您应该能够请求能够写入它。 -
我可以从两个设备上正确读取,同时使用新的短信 API 和隐藏短信 API。我不确定是否所有 4.4 设备都有提供程序,或者发生这种情况是因为这两个设备都从 4.3 更新到 4.4。设备中保存了一些消息,但我无法删除它们或向其中添加更多消息。无赖:P
-
如果提供者存在,应该有办法让应用程序对其进行操作。因此,我假设您遇到了某种错误。这个错误是“
Intent应该工作”还是“我们应该在我们不打算让它工作的设备上禁用提供程序”,我不能说。
标签: android sms tablet telephony android-4.4-kitkat