我正在开发一个短信应用程序。现在我的应用程序是手机上的默认短信应用程序。这意味着我的应用程序首先接收传入的短信。现在我想以编程方式从我的应用程序发送传入的短信意图到其他应用程序(内置短信应用程序)。
注意:我不想更改默认短信应用。
我的代码从我的应用程序发送广播到内置短信应用程序 -
context.sendBroadcast(intent.setClassName( builtInSmsPackage, "com.android.mms.transaction.SmsReceiverService" )
.setPackage(builtInSmsPackage)
.setAction("android.provider.Telephony.SMS_RECEIVED"));
但内置的短信应用程序无法接收我从我的应用程序发送的短信意图。
答案 0 :(得分:2)
现在我的应用程序是手机上的默认短信应用程序。这意味着我的应用程序首先接收传入的短信。
SMS_RECEIVED
广播顺序取决于<intent-filters>
的优先级。 SMS_DELIVER
仅发送给一个接收者,即用户选择的默认短信应用。
我的代码从我的应用程序发送广播到内置短信应用程序 -
首先,这是错误的Intent
操作。作为Mike M. points out,系统已经将SMS提供给所有SMS_RECEIVED
广播接收者。默认SMS客户端通常会忽略该广播(请参阅the blog post that you claim to have read)。默认短信应用的唯一广播是SMS_DELIVERED
。
其次,您无权发送SMS_DELIVER
广播。这需要保留BROADCAST_SMS
权限,这是普通Android SDK应用程序无法保留的,以防止恶意软件作者执行您要执行的操作。即使使用SMS_RECEIVED
,I have been recommending that apps ensure that the sender holds BROADCAST_SMS
for three years,也可以再次打击恶意软件。
第三,SmsReceiverService
是Service
。您无法向服务发送广播。该服务可以处理 SMS_DELIVER
广播,但不会接收。
现在我想将传入的短信意图发送到其他应用
通过标准Android SDK机制在Android 4.4+上无法实现这一点。在Android 4.4+上,短信拦截是完整短信客户端或操作系统的一项功能。它不是其他应用程序可以添加的功能。