gpt4 book ai didi

android - 由于缺少对 URI 的许可,重新发送 Intent 失败

转载 作者:行者123 更新时间:2023-11-29 00:03:44 25 4
gpt4 key购买 nike

在我的应用程序中,所有 Activity 都受登录保护:
每个 Activity 都检查其 onCreate/onShow 回调,用户是否已登录。如果是,则不会发生任何特殊情况。但如果用户未登录,则这些回调会将用户重定向到 LoginActivity 并完成当前 Activity :

Intent loginIntent = new Intent(this, LoginActivity.class);
loginIntent.putExtra(EXTRA_ORIGINAL_INTENT, getIntent());
finish();
startActivity(loginIntent);

如上所示,用于启动当前 Activity 的原始 Intent 被添加到 loginIntent 的 extras 中。因此,LoginActivity 可以在成功登录后重新发送 Intent ... 理论上。然而,这并不总是有效。

它在从启动器启动时有效:

Intent with ACTION_MAIN --> MainActivity --> Redirect to LoginActivity -->
Redirect back to MainActivity after successful login

在 Chrome 上使用分享按钮时不起作用:

Intent with ACTION_SEND --> SendActivity --> Redirect to LoginActivity -->
Redirect back to SendActivity after successful login

问题是最后一个重定向尝试重新发送最初用于启动 SendActivity 的原始 Intent:

// Resend original intent
startActivity((Intent) getIntent().getExtra(EXTRA_ORIGINAL_INTENT));

失败并出现异常:

Caused by: java.lang.SecurityException: Uid 10075 does not have permission to uri 0 @ content://com.android.chrome.FileProvider/images/screenshot/6471932623902346234.jpg

现在我的问题是:
如何在不导致权限异常的情况下重新发送 Intent
如何传递所需的权限?


注意:
我真的想要完成当前 Activity 并重新发送 Intent 的重定向行为。出于各种原因,简单地将 Activity (MainActivitySendActivity)保留在堆栈中并从 LoginActivity 返回给它们不是一种选择。

最佳答案

如果权限沿 Activity/Intent 链传递,则在 LoginActivity 中重新发送原始 Intent 有效.这可以通过以下方式实现:

  1. 重定向-Intent 是原始Intent 的副本。
  2. 在重新发送之前,Intent 是明确的。

例如,SomeActivity 使用用于启动 SomeActivityIntent 的副本重定向到 LoginActivity:

Intent loginIntent = new Intent(getIntent()); // copy ...
loginIntent.setClass(this, LoginActivity.class); // ... explicit now
// maybe loginIntent.setAction(...) etc.
loginIntent.putExtra(EXTRA_ORIGINAL_INTENT, getIntent());
finish();
startActivity(loginIntent);

现在,登录成功后,LoginActivity可以重定向回SomeActivity:

Intent origIntent = getIntent().getParcelableExtra(EXTRA_ORIGINAL_INTENT);
Intent redirectIntent = new Intent(origIntent); // copy ...
redirectIntent.setClass(this, SomeActivity.class); // ... explicit now
finish();
startActivity(redirectIntent);

关于android - 由于缺少对 URI 的许可,重新发送 Intent 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42580467/

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