【发布时间】:2011-04-03 12:19:49
【问题描述】:
我有一个应用程序 A,它在安装时启用了所有权限。另一个应用程序说 B 没有权限并希望获得该权限。 B 能否与 A 通信,以便 A 将其权限转移给 B。
请回复,我被困在这里。我想动态获得一些权限。这是最好的主意还是其他的主意?
【问题讨论】:
标签: android dynamic permissions runtime
我有一个应用程序 A,它在安装时启用了所有权限。另一个应用程序说 B 没有权限并希望获得该权限。 B 能否与 A 通信,以便 A 将其权限转移给 B。
请回复,我被困在这里。我想动态获得一些权限。这是最好的主意还是其他的主意?
【问题讨论】:
标签: android dynamic permissions runtime
据我所知,应用不一定会授予其他应用权限,但如果您是这两个应用的开发者,AppB 可以从 AppA 继承权限。如果 AppA 和 AppB 在其清单中声明相同的 sharedUserId 值 (android:sharedUserId="xyz") 并且 AppA 和 AppB 都使用相同的签名进行签名,那么 Android 将就权限而言将它们视为同一个应用程序。因此,例如,AppB 可以在未经许可“perm1”的情况下存在于设备上。然后,可以使用“perm1”安装 AppA。如果 AppA 和 AppB 具有相同的 sharedUserId 和签名,则安装 AppA 时,AppB 将被“授予”“perm1”。
我刚刚还没有测试过这个,但我知道它曾经可以工作(大约一年前)。
【讨论】:
如果一个应用程序可以将任何权限授予另一个应用程序,那将是非常不安全的,你不觉得吗...
一些坏人只需要说服你安装他的 A 应用程序;然后,无论您要安装什么其他 B 应用程序,该 B 应用程序都不必在安装时请求任何特定权限(这些权限稍后将由 A 授予)——而 B 将仍然可以在您的设备上执行任何操作吗?
我当然希望你的要求是不可能的;-)
【讨论】:
您的应用程序 A 可以提供一些 Content Provider 来访问信息。应用程序 B 可以使用 A 的内容提供者来获取信息。 http://developer.android.com/guide/topics/providers/content-providers.html
但不知何故,这听起来像是你想做一些邪恶的事情。如果您想了解更多信息,请提供更多关于您需要这样做的信息!
【讨论】:
是的,这可以使用 PendingIntents 以迂回的方式实现。这不是一个确切的代码 sn-p 但应该给你的想法:
您不能转移权限,但您可以将执行某些操作的能力从 A 转移到 B。假设您要转移执行某个 ACTION 的能力。
A 需要创建一个待处理的 Intent:
Intent intent = new Intent(ACTION); PendingIntent pIntent = PendingIntent.getActivity(context, requestCode, intent, flags);
A 通过编组待处理的 Intent 将其发送给 B
Intent intent = new Intent(context, B.class); intent.putExtra("pendingIntent", pIntent); startActivity(intent);
在 B 我们反序列化待处理的意图,我们可以使用它来执行受限的ACTION
PendingIntent pIntent = intent.getExtra("pendingIntent"); pIntent.send();
【讨论】: