Android 自定义帐户:SecurityException:权限拒绝:启动 Intent

问题描述

我正在 Android 中开发一些应用程序,这些应用程序将共享从身份验证服务器收到的身份验证和身份验证令牌。 我想按照此处的建议使用 android 自定义帐户: https://developer.android.com/training/id-auth/custom_auth 以便在设置 -> 帐户中添加用户,然后所有授权的应用程序都可以访问身份验证令牌。

现在我有一个实现实际身份验证的应用程序。本质上:

在带有身份验证的应用中,我可以毫无问题地执行所有操作。

在客户端应用程序中,我只能执行前两个操作:

  • 检查是否有我这种类型的帐户
  • 访问存储在身份验证应用程序中的身份验证令牌

如果客户端应用程序尝试添加调用 android.accounts.AccountManager#addAccount() 的新帐户,则请求会正确传递到身份验证应用程序中的 AbstractAccountAuthenticator 实例(通过服务传递请求),但登录活动未针对以下错误

2021-01-14 09:15:33.902 10413-10452/xxx.client1 W/Binder: Caught a RuntimeException from the binder stub implementation.
    java.lang.SecurityException: Permission Denial: starting Intent { cmp=xxx.customaccount/xxx.ui.login.LoginActivity clip={text/plain {...}} (has extras) } from ProcessRecord{db30657 10413:xxx.client1/u0a155} (pid=10413,uid=10155) not exported from uid 10154
        at android.os.Parcel.createExceptionorNull(Parcel.java:2373)
        at android.os.Parcel.createException(Parcel.java:2357)
        at android.os.Parcel.readException(Parcel.java:2340)
        at android.os.Parcel.readException(Parcel.java:2282)
        at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3696)
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1723)
        at android.app.Activity.startActivityForResult(Activity.java:5320)
        at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:675)
        at android.app.Activity.startActivityForResult(Activity.java:5278)
        at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:662)
        at android.app.Activity.startActivity(Activity.java:5664)
        at android.app.Activity.startActivity(Activity.java:5617)
        at android.accounts.AccountManager$AmsTask$Response.onResult(AccountManager.java:2330)
        at android.accounts.IAccountManagerResponse$Stub.onTransact(IAccountManagerResponse.java:97)
        at android.os.Binder.execTransactInternal(Binder.java:1159)
        at android.os.Binder.execTransact(Binder.java:1123)
     Caused by: android.os.remoteexception: Remote stack trace:
        at com.android.server.wm.ActivityStackSupervisor.checkStartAnyActivityPermission(ActivityStackSupervisor.java:1032)
        at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:999)
        at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:669)
        at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1100)
        at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1072)

登录活动添加 android:export=true 身份验证开始但存储无法正常工作(我认为这不是正确的方向,因为身份验证应该在身份验证应用程序中启动以正确管理结果活动)。 有关如何解决此问题的任何建议?

谢谢

gcast

更新:怀疑必须在使用其他 android 组件作为绑定服务的应用程序中(因此在客户端应用程序和身份验证应用程序中)实现令牌共享。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)