Android - 向 android 中的其他(内置短信应用程序)应用广播短信意图

Android - Broadcast SMS intent to other (Biult-in sms app) app in android

我正在开发一个短信应用程序。现在我的应用程序是 phone 上的默认短信应用程序。这意味着我的应用程序首先接收传入的短信。现在我想以编程方式将传入的短信意图从我的应用程序发送到其他应用程序(内置短信应用程序)。

注意:我不想更改默认短信应用程序。

我的代码,用于从我的应用程序向内置短信应用程序发送广播 --

 context.sendBroadcast(intent.setClassName( builtInSmsPackage, "com.android.mms.transaction.SmsReceiverService" )
.setPackage(builtInSmsPackage)
.setAction("android.provider.Telephony.SMS_RECEIVED"));

但是内置短信应用程序无法接收我从我的应用程序发送的短信意图。

Now my app is default sms app on the phone. That means my app is receiving incoming sms first.

SMS_RECEIVED广播顺序由<intent-filters>上的优先级决定。 SMS_DELIVER 仅发送给一个接收者,即用户选择的默认 SMS 应用程序的接收者。

My code to send broadcast from my app to built-in sms app --

首先,那是错误的Intent动作。正如 Mike M. points out, the system will already provide the SMS to all SMS_RECEIVED broadcast receivers. That broadcast usually is ignored by the default SMS client (see the blog post that you claim to have read)。默认 SMS 应用的唯一广播是 SMS_DELIVERED.

其次,您无权发送SMS_DELIVER广播。这需要持有普通 Android SDK 应用程序无法持有的 BROADCAST_SMS 权限,以防止恶意软件作者做你想做的事情。即使使用 SMS_RECEIVEDI have been recommending that apps ensure that the sender holds BROADCAST_SMS for three years,再次打击恶意软件。

第三,SmsReceiverService是一个Service。您不能向服务发送广播。该服务可能 处理 SMS_DELIVER 广播,但它不会 接收 它。

Now I want to send incoming sms intent to other app

这在 Android 4.4+ 上通过标准 Android SDK 机制是不可能的。在 Android 4.4+ 上,短信拦截是完整短信客户端或 OS 的一项功能。这不是其他应用程序可以添加的功能。