我正在编写一个应用程序,我们要求用户将Google帐户关联起来,以便我们可以在不同设备上安装应用程序之间自动同步服务器端数据.
我已经在使用了
AccountManager accountManager = AccountManager.get(mContext);
Account[] accounts = accountManager.getAccountsByType("com.google");
Run Code Online (Sandbox Code Playgroud)
拉出可用的用户帐户列表.如果只有一个我们使用它,并且在多个帐户的情况下,我们要求用户选择与该应用程序关联的帐户.我现在遇到的问题是设备上没有谷歌帐户的情况.我正在使用这个
context.startActivity(new Intent(android.provider.Settings.ACTION_ADD_ACCOUNT));
Run Code Online (Sandbox Code Playgroud)
强制添加帐户对话框; 但问题是,它为用户提供了添加哪种帐户类型的选项,我们希望通过强制他们加入Google帐户选项来避免混淆.有没有办法做到这一点?
我知道这是一个老问题,但Android提供了另一种解决方案.
使用AccountManager.addAccount()需要MANAGE_ACCOUNTS许可.我发现用户在看到该权限时会对您的应用发出警告.MANAGE_ACCOUNTS如果您使用Settings.EXTRA_ACCOUNT_TYPESAPI 18中添加的额外内容,则可以避免要求:http:
//developer.android.com/reference/android/provider/Settings.html#EXTRA_ACCOUNT_TYPES
这将启动添加Google帐户流程:
Intent intent = new Intent(Settings.ACTION_ADD_ACCOUNT);
intent.putExtra(Settings.EXTRA_ACCOUNT_TYPES, new String[] {"com.google"});
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
我发现即使Settings.EXTRA_ACCOUNT_TYPES添加了API 18,它似乎适用于运行ICS或更高版本的所有设备.可悲的是,它不适用于姜饼.我不确定在API 18之前是否可以信任它,但到目前为止我已经找到了成功.
这样的事情应该这样做:
AccountManager accountMgr = AccountManager.get(mContext);
accountMgr.addAccount("com.google", "ah", null, new Bundle(), (Activity) mContext, null, null);
Run Code Online (Sandbox Code Playgroud)
"ah"是授权令牌类型.
| 归档时间: |
|
| 查看次数: |
4663 次 |
| 最近记录: |