2010-08-26 76 views
10

过去几天我一直在试用Android SDK,准备为商店编写应用程序,但是我遇到了一些问题。以编程方式在Android 2.2中启动“添加帐户”活动

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

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

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

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

任何人都可以首先告诉我这是否可以通过JAVA完成,其次我可以怎么做呢?

如果必须解决同步设置屏幕,我会(这可以通过Settings.ACTION_SYNC_SETTINGS意图来实现),但是如果能够将用户直接导向到所需的屏幕,那将是相当不错的。

回答

15

退房的ACTION_ADD_ACCOUNT

startActivity(new Intent(Settings.ACTION_ADD_ACCOUNT)); 
+0

我的感谢 - 这是一个更接近我想要实现的,但是引用我们的绝地大师 - “这是不是你正在寻找的活动“。 这是我尝试调用链中的下一步 - 安装向导的一部分 - 点击“Google”帐户符号时显示的活动。如果这是不可能的,我会坚持ACTION_ADD_ACCOUNT的答案。谢谢 – Seidr 2010-08-26 13:47:42

+0

也许这是不可能的,因为我没有看到链接的资源。这是描述设置全局变量的唯一页面。 – Pentium10 2010-08-26 13:50:08

+0

这就是我担心的 - 我想象一下,从adb shell(com.google.android.gsf/.login.AccountIntroActivity)访问我上面调用的组件可能会限制一些方法。 – Seidr 2010-08-26 13:53:22

3

尝试以下操作:

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); 
} 
+0

谢谢markjan - 一旦我再次获得我的SDK安装程序,我会检查一下。 – Seidr 2010-11-08 16:11:17

+0

“my_auth_token”是否为Google帐户的有效验证令牌类型?如果不是,那么您能否告诉我添加Google帐户的有效身份验证令牌类型? – sdream 2016-03-22 10:50:34

1

线索是在你的shell命令:

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

Android的客户经理提供了一个API添加帐户。 (Google或其他帐户类型)

公共AccountManagerFuture addAccount(字符串ACCOUNTTYPE,字符串authTokenType,字符串[] requiredFeatures,捆绑addAccountOptions,活动活动,AccountManagerCallback回调,处理程序的处理程序)

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

1

答案为上述问题通过在意向附加数据中提供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); }