gpt4 book ai didi

android - 避免其他 Android 应用程序收听我的广播?

转载 作者:行者123 更新时间:2023-11-29 21:11:31 24 4
gpt4 key购买 nike

嗯...我不知道尝试这样做在 Android 架构上是否有意义,或者是否有可能。

我接受第 3 方应用程序通过带有自定义 intent-filter 的 BroadcastReceiver 调用我的应用程序。因此,我要求第 3 方应用程序向我发送包名称,以便能够通过 sendBroadcast 向它们发送有关委托(delegate)给我的工作状态的回调。

现在,我想制作我自己的与我的核心应用程序连接的第 3 方应用程序,我担心一些特殊的回调将仅由我的第 3 方应用程序发送和捕获。

因此,如果“未经授权”的第 3 方收听我发送的 Intent 过滤器将捕获我的广播。

目前,当我收到自己的第 3 方的广播时,我会检查包名称并检查是否安装了此包,以尽量避免未经授权的假冒伪造为我自己的第 3 方。但如果用户安装了我的第 3 方并且未授权,则此“保护”将失败。

我阅读了一些有关设置自定义权限的内容,但我不知道是否适合我的情况。

你能给我一些建议吗?

非常感谢。

最佳答案

PendingIntent有一个有趣的属性:它不仅 bundle 了 Intent以及要对其执行的操作,但它也有效地 bundle 了执行该操作的安全上下文。

换句话说,它可用于允许外部进程与您的组件之一对话,即使该组件未导出也是如此。

我们在 PendingIntent 的标准用法中经常看到这一点, 这样一个 AlarmManagerNotification .我们通常使用明确的 IntentPendingIntent里面(例如,new Intent(this, MyOtherComponent.class))。通常这些组件没有 <intent-filter>或以其他方式在我们的 list 中导出。然而,它们起作用了。这是因为虽然管理警报和/或通知的操作系统进程无权与我们的组件正常对话,但它可以执行 PendingIntent , 和 PendingIntent是我们说“是的,您可以与该组件对话,但仅限于此 PendingIntent 所做的任何事情,而不是任意的东西”。

因此,如果一个应用想要与另一个应用建立回调机制,一个巧妙的方法是使用 PendingIntent .第一个应用程序的组件(例如 BroadcastReceiver )不必导出,更不用说 <intent-filter> 了。 .然而,第二个应用程序可以通过 PendingIntent 触发该组件。 .自PendingIntentParcelable , 它可以很容易地作为其他一些额外的东西打包 Intent ,通过 AIDL 定义的接口(interface)为绑定(bind)服务传递,或者以其他方式遍历进程边界。

关于android - 避免其他 Android 应用程序收听我的广播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22660416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com