AccountManager:如何让用户使用对话框选择帐户

时间:2013-03-14 10:20:42

标签: android accountmanager

在AccountManager教程Remembering Your User中,建议:

  

如果数组中有多个Account,则应显示一个   要求用户选择一个的对话框。

最好的方法是什么?我有一个解决方案,但如果社区中有其他好的例子,那么这似乎是那种可以共享并且容易被其他人重用的样板代码。

2 个答案:

答案 0 :(得分:11)

从Android 4.0(API级别14)开始,启动具有下图所示意图的活动会显示帐户选择器。

Intent intent = AccountManager.newChooseAccountIntent(null, null,
        new String[] { acc_type }, true, null, null,
        null, null);
startActivityForResult(intent, CHOOSE_ACCOUNT);

对于4.0以上的设备,
使用https://github.com/frakbot/Android-AccountChooser

答案 1 :(得分:5)

我使用此代码。 它显示一个对话框,因此最终用户可以选择一个谷歌帐户。

ArrayList<String> gUsernameList = new ArrayList<String>();
AccountManager accountManager = AccountManager.get(this);
Account[] accounts = accountManager.getAccountsByType("com.google");

gUsernameList.clear();
//loop
for (Account account : accounts) {
    gUsernameList.add(account.name);
}

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Choose you gmail-account");

ListView lv = new ListView(this);

ArrayAdapter<String> adapter = new ArrayAdapter<String> 
(this,android.R.layout.simple_list_item_1, android.R.id.text1, 
gUsernameList);

lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {    

public void onItemClick(AdapterView<?> parent,View view,int position,long 
id) 
{
    Log.d("You-select-gmail-account", gUsernameList.get(position)) );
}
});

builder.setView(lv);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        dialog.dismiss();
    }
});

final Dialog dialog = builder.create();
dialog.show();