安卓系统中,一个应用程序能否授予另一个应用程序权限?

4
我有一个名为A的应用程序,在安装时启用了所有权限。另一个名为B的应用程序没有某个权限,想要获取该权限。B是否可以与A通信,以便A可以将其权限传输给B。
请回复,我被卡住了。我想动态获取一些权限。这是最好的想法还是其他想法?
4个回答

5
据我所知,应用程序不能给其他应用程序授权,但是如果您是两个应用程序的开发人员,则AppB可以继承自AppA的权限。如果AppA和AppB在清单文件中声明了相同的sharedUserId值(android:sharedUserId="xyz"),并且AppA和AppB签名相同,那么Android将认为它们在权限方面是相同的应用程序。因此,例如,AppB可以存在于设备上,没有权限“perm1”。然后,可以安装具有“perm1”的AppA。如果AppA和AppB具有相同的sharedUserId和签名,则在安装AppA时,将被“授予”“perm1”。 我现在没有测试过,但是我知道它过去(大约一年前)是可行的。

1

如果一个应用程序可以授予另一个应用程序任何权限,那将非常不安全,你不觉得吗...

某些恶意人只需要说服你安装他的A应用程序;然后无论你安装什么其他B应用程序,该B应用程序都不必在安装时请求任何特定权限(这些权限稍后由A授权)——并且B仍然能够在您的设备上执行任何操作?

我真的希望你所问的是不可能的;-)


1

2
我不想做任何不好的事情。我对创建动态权限授予系统很感兴趣。这样,需要权限的任何应用程序都可以向我的应用程序发送信号,在那里我会请求用户身份验证,并提供一些过期机制以在一段时间后覆盖给定的权限。如果用户同意,我将授予所请求的应用程序权限。 - scari
这是我想做的事情... 请帮忙。 - scari
有没有办法在我已经启用所有权限的应用程序下执行“无需许可”的应用程序提出的工作。比如说,执行在该应用程序中定义的函数的处理程序?(如果我错了,请纠正我。)或者您能否建议任何代码或文档,以便我可以找到Android在运行时如何处理权限请求的详细信息。(不是Manifest.xml)(真正的Android源代码) - scari

1

是的,可以通过使用PendingIntents来绕过一些方式实现。以下不是精确的代码片段,但应该能给您一个想法:

您无法转移权限,但可以将执行某些操作的能力从A传输到B。假设您想要传输执行特定 ACTION 的能力。

  1. A需要创建一个挂起的意图:

    Intent intent = new Intent(ACTION);
    PendingIntent pIntent = PendingIntent.getActivity(context, requestCode, intent, flags);

  2. A通过编组挂起的意图将其发送到B

    Intent intent = new Intent(context, B.class);
    intent.putExtra("pendingIntent", pIntent);
    startActivity(intent);

  3. 在B处,我们反序列化挂起的意图,然后可以使用它来执行受限制的 ACTION

    PendingIntent pIntent = intent.getExtra("pendingIntent");
    pIntent.send();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接