【问题标题】:Can an app give its permission to another application in android?一个应用程序可以将其权限授予 android 中的另一个应用程序吗?
【发布时间】:2011-04-03 12:19:49
【问题描述】:

我有一个应用程序 A,它在安装时启用了所有权限。另一个应用程序说 B 没有权限并希望获得该权限。 B 能否与 A 通信,以便 A 将其权限转移给 B。

请回复,我被困在这里。我想动态获得一些权限。这是最好的主意还是其他的主意?

【问题讨论】:

    标签: android dynamic permissions runtime


    【解决方案1】:

    据我所知,应用不一定会授予其他应用权限,但如果您是这两个应用的开发者,AppB 可以从 AppA 继承权限。如果 AppA 和 AppB 在其清单中声明相同的 sharedUserId 值 (android:sharedUserId="xyz") 并且 AppA 和 AppB 都使用相同的签名进行签名,那么 Android 将就权限而言将它们视为同一个应用程序。因此,例如,AppB 可以在未经许可“perm1”的情况下存在于设备上。然后,可以使用“perm1”安装 AppA。如果 AppA 和 AppB 具有相同的 sharedUserId 和签名,则安装 AppA 时,AppB 将被“授予”“perm1”。

    我刚刚还没有测试过这个,但我知道它曾经可以工作(大约一年前)。

    【讨论】:

      【解决方案2】:

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

      一些坏人只需要说服你安装他的 A 应用程序;然后,无论您要安装什么其他 B 应用程序,该 B 应用程序都不必在安装时请求任何特定权限(这些权限稍后将由 A 授予)——而 B 将仍然可以在您的设备上执行任何操作吗?

      我当然希望你的要求是不可能的;-)

      【讨论】:

        【解决方案3】:

        您的应用程序 A 可以提供一些 Content Provider 来访问信息。应用程序 B 可以使用 A 的内容提供者来获取信息。 http://developer.android.com/guide/topics/providers/content-providers.html

        但不知何故,这听起来像是你想做一些邪恶的事情。如果您想了解更多信息,请提供更多关于您需要这样做的信息!

        【讨论】:

        • 我不想做任何坏事。我有兴趣创建一个动态权限授予系统。这样任何需要权限的应用程序都可以向我的应用程序发送信号,我会在其中要求用户身份验证和一些过期机制,以便在一段时间后覆盖给定的权限。如果用户同意,我将授予我对所请求应用的权限。
        • 这就是我想要做的......请帮助
        • 有什么方法可以在我启用了所有权限的应用程序下执行“未经许可的应用程序”提出的工作。就像对该应用程序中定义的函数执行处理程序一样? ( 如果我错了纠正我 )。或者您能否建议任何代码或文档,我可以在其中找到 android 在运行时如何处理权限请求。 (不是Manifest.xml)(真正的android源码)
        【解决方案4】:

        是的,这可以使用 PendingIntents 以迂回的方式实现。这不是一个确切的代码 sn-p 但应该给你的想法:

        您不能转移权限,但您可以将执行某些操作的能力从 A 转移到 B。假设您要转移执行某个 ACTION 的能力。

        1. A 需要创建一个待处理的 Intent:

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

        2. A 通过编组待处理的 Intent 将其发送给 B

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

        3. 在 B 我们反序列化待处理的意图,我们可以使用它来执行受限的ACTION

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

        【讨论】:

          猜你喜欢
          • 2020-10-28
          • 2018-09-23
          • 2012-04-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多