每个活动在其
onCreate
/onShow
回调中检查用户是否已登录。如果已登录,则不会发生任何特别的事情。但如果用户没有登录,则这些回调将重定向用户到一个LoginActivity
并结束当前活动:Intent loginIntent = new Intent(this, LoginActivity.class);
loginIntent.putExtra(EXTRA_ORIGINAL_INTENT, getIntent());
finish();
startActivity(loginIntent);
如上面的行所示,原始的
Intent
用于启动当前活动已添加到loginIntent
的额外信息中。因此,在成功登录后,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
,而不会引起权限异常?
如何传递所需的权限?
注意:
我真的希望以完成当前活动并重新发送Intent
的方式来实现重定向行为。由于各种原因,简单地保留活动(MainActivity
, SendActivity
)在堆栈中并从LoginActivity
返回它们不是选项。
SendActivity
)将intent转换为显式intent。似乎我不允许重新发送这个隐式intent,但是显式intent按预期工作。这正是我想做的事情;-) - Biggie