在用户允许访问后,如何强制AccountManager显示"访问请求"屏幕?

Rus*_*vis 15 android accountmanager

使用AccountManager :: getAuthTokenByFeatures时,将显示"访问请求"屏幕,供用户允许或拒绝访问该帐户.用户允许访问后,后续调用(具有相同的参数)将返回auth令牌而不提示用户.

如何清除状态以确保出现"访问请求"提示?(这至少对于开发,测试和演示目的很有用.)

Rus*_*vis 7

我发现的唯一解决方案是手动清除存储在系统accounts.db中的数据.从命令行运行以下命令以清除系统上的所有帐户授予.

对于模拟器:

adb -e shell 'sqlite3 /data/system/accounts.db "delete from grants;"'
Run Code Online (Sandbox Code Playgroud)

对于设备(必须root并且安装了sqlite3二进制文件):

adb -d shell 'echo sqlite3 /data/system/accounts.db \"delete from grants\;\" | su'
Run Code Online (Sandbox Code Playgroud)

  • 对于那些仍在继续解决这个问题的人们感兴趣:(1)在Android 4.2上添加了多用户支持,accounts.db文件将位于每个用户的子目录中,例如/ data/system/users /0/accounts.db(2)当我遇到需要撤销这些权限时,我发现/data/system/users/0/accounts.db中的grants表是空的.我正在使用较新的Google Play服务库来获取令牌,而且它似乎会将赠款存储在其他地方 - 甚至可能存储在云端(!). (2认同)