在 Android 2.2 中以编程方式启动“添加帐户”活动

Posted

技术标签:

【中文标题】在 Android 2.2 中以编程方式启动“添加帐户”活动【英文标题】:Programmatically starting the 'Add Account' activity in Android 2.2 【发布时间】:2011-04-04 06:27:33 【问题描述】:

过去几天我一直在试验 android SDK,准备为商店编写一个应用程序,但是我遇到了一些问题。

我要编写的应用程序要求用户有一个与手机关联的 Google 帐户。检索和使用 Auth 令牌等不是问题,但是我希望能够通过菜单 Settings->Accounts->Add Account 显示用户可以正常访问的活动。

现在通过实验,我已经能够使用以下命令从 shell 启动此活动。

am start -n com.google.android.gsf/.login.AccountIntroActivity

我在使用 Intent 类在 JAVA 中执行相同操作时遇到问题。

谁能告诉我首先这是否可以通过 JAVA 完成,其次我该怎么做?

如果我必须适应同步设置屏幕,那么我会(这可以通过 Settings.ACTION_SYNC_SETTINGS 意图实现),但是能够将用户直接引导到所需的屏幕会非常好。

【问题讨论】:

【参考方案1】:

查看ACTION_ADD_ACCOUNT

startActivity(new Intent(Settings.ACTION_ADD_ACCOUNT));

【讨论】:

谢谢——这离我想要达到的目标又近了一步,但引用我们的绝地大师的话——“这不是你要找的活动”。这是我试图调用的链中的下一步 - 设置向导的一部分 - 当您单击“Google”帐户符号时出现的活动。如果这是不可能的,我会坚持 ACTION_ADD_ACCOUNT 答案。谢谢 可能这是不可能的,因为我在链接的资源上看不到。这是唯一描述全局设置的页面。 这就是我所担心的 - 我想从 adb shell (com.google.android.gsf/.login.AccountIntroActivity) 访问我上面调用的组件可能会受到一些限制。【参考方案2】:

尝试以下方法:

public static void addGoogleAccount(final Activity activity) 
    final AccountManager accountMgr = AccountManager.get(activity);
    accountMgr.addAccount("com.google", "my_auth_token", null, null, activity, null, null);

【讨论】:

谢谢 markjan - 我会在我重新设置 SDK 后检查一下。 "my_auth_token" 它是 Google 帐户的有效身份验证令牌类型吗?如果不是,请告诉我添加 Google 帐户的有效身份验证令牌类型吗?【参考方案3】:

通过在意图额外数据中提供 EXTRA_ACCOUNT_TYPES 来回答上述问题。并将值设置为“com.google”以提醒活动:

public static void startAddGoogleAccountIntent(Context context)
Intent addAccountIntent = new Intent(android.provider.Settings.ACTION_ADD_ACCOUNT)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
addAccountIntent.putExtra(Settings.EXTRA_ACCOUNT_TYPES, new String[] "com.google");
context.startActivity(addAccountIntent); 

【讨论】:

我测试过,效果很好,应该接受这个答案【参考方案4】:

Android Account Manager 提供了一个 API 来添加帐户。 (谷歌或其他帐户类型)

public AccountManagerFuture addAccount(String accountType, String authTokenType, String[] requiredFeatures, Bundle addAccountOptions, Activity 活动, AccountManagerCallback 回调, Handler handler)

http://developer.android.com/reference/android/accounts/AccountManager.html

【讨论】:

【参考方案5】:

线索在你的shell命令中:

    Intent intent = new Intent();
    intent.setClassName( "com.google.android.gsf", "com.google.android.gsf.login.AccountIntroActivity" );
    context.startActivity( intent );

【讨论】:

【参考方案6】:

对于最近使用 adb 的 Android,您可以这样做:

adb shell am start -a android.settings.ADD_ACCOUNT_SETTINGS \
                   -n com.android.settings/.accounts.AddAccountSettings

(您仍然需要选择您想要的帐户类型)

【讨论】:

以上是关于在 Android 2.2 中以编程方式启动“添加帐户”活动的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中以编程方式从启动器中删除应用程序

在 android 中以编程方式使用谷歌日历添加同步事件

Android:无法在约束布局中以编程方式正确添加约束集

约束布局中以编程方式添加的按钮将忽略约束 - Android

如何在 Android 上的 TabLayout 中以编程方式添加选项卡

如何在android中以编程方式将铃声添加到本机应用程序联系人