gpt4 book ai didi

android - 安全异常 : Permission Denial: While launching Activity via explicit intent

转载 作者:搜寻专家 更新时间:2023-11-01 09:21:54 24 4
gpt4 key购买 nike

我正在阅读 declaring permissions in activity.根据文档

You can use the manifest's tag to control which apps can start a particular activity. A parent activity cannot launch a child activity unless both activities have the same permissions in their manifest. If you declare a element for a particular activity, the calling activity must have a matching element.

为了尝试这一点,我创建了 2 个示例应用程序。第一个应用程序将尝试使用显式 Intent 直接启动第二个应用程序的 Activity ,此外,第二个应用程序将声明对我从第一个应用程序启动的特定 Activity 的许可。

这些是我遵循的步骤

  1. 创建了 2 个应用程序(比如发送方和接收方)
  2. 添加了权限 <uses-permission android:name="permission.SHARE_POST"/>Manifest发件人
  3. 现在,通过单击 Sender App 的按钮,我调用名为 ShareActivity 的 Receivers Activity|如下

        Intent intent = new Intent();
    intent.setComponent(new ComponentName("basics.android.com.androidbasics","basics.android.com.androidbasics.ShareActivity"));
    startActivity(intent);

    注意:basics.android.com.androidbasics是接收方的包名

  4. 下面给出了第二个应用程序(接收器) list 中的 Activity 声明

           <activity
    android:name=".ShareActivity"
    android:exported="true"
    android:permission="permission.SHARE_POST"/>

现在,当我运行这两个应用程序并尝试启动 ShareActivity从发件人那里,我收到以下错误

Caused by: java.lang.SecurityException: Permission Denial: starting Intent { cmp=basics.android.com.androidbasics/.ShareActivity } from ProcessRecord{e09a1fc 26267:sender.android.com.sender/u0a925} (pid=26267, uid=10925) requires permission.SHARE_POST

似乎发件人没有权限 permission.SHARE_POST然而。但是我已经在发件人的 list 中声明了。这里发生了什么事?

最佳答案

在 Android 中使用自定义权限是一项相当高级的事情。基本配方是:

  1. 确定您想要的权限名称。它需要在设备上是唯一的。所以,permission.SHARE_POST这不是一个好的选择 — 添加一个与您的域名相关联的前缀或您正在使用的任何其他内容作为您应用程序的基础 applicationId值(value)观。
  2. 在使用权限保护自己的应用程序中,声明一个 <permission>元素,带有 android:name保存步骤#1 中的权限名称的属性。或者,给它一个 android:protectionLevel属性(例如 signature ,因此只有使用相同签名 key 签名的应用才能协同工作)。
  3. 在使用权限保护自己的应用程序中,添加 android:permission组件上的属性(例如 <activity> ),值为您在步骤 #1 中的权限名称。
  4. 在希望与第 3 步中的应用通信的应用中,添加 <uses-permission>属性,带有 android:name属性包含步骤 #1 中的权限名称。
  5. 在这两个应用中,设置您的 minSdkVersion到 21,因为旧版本的自定义权限存在安全问题。

如果防御者(第 2 步和第 3 步)始终在客户端(第 4 步)之前安装,这将起作用。如果您希望应用程序可以按任一顺序安装,请将上面的步骤 #2 替换为:

  1. 两个应用中,声明一个<permission>元素,带有 android:name保存步骤#1 中的权限名称的属性。或者,给它一个 android:protectionLevel属性(例如 signature ,因此只有由相同签名 key 签名的应用才能协同工作)。此外,请确保两个应用始终由相同的签名 key 签名,否则它们无法同时定义相同的权限。

关于android - 安全异常 : Permission Denial: While launching Activity via explicit intent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54387947/

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