調用系統中Account類型的登錄界面
來源:程序員人生 發布時間:2014-12-09 08:02:50 閱讀次數:3305次
我們的手機中的Seting里面可以添加很多類型的帳戶,有時候,我們需要在程序中啟動這些帳戶的登錄界面,但是,就算你知道了登錄界面的包名、類名,通過Intent也沒辦法啟動,這是由于Android的權限控制。

不過,我們在Framework中也找到了解決的辦法,比如我們要啟動Google Account的登錄界面,我們只需要知道該帳戶的類型就能夠了,像Google就是com.google:
下面我們來看看如何啟動這樣1個界面:
private void setupAccount(String type) {
Bundle addAccountOptions = new Bundle();
mPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(), 0);
addAccountOptions.putParcelable(KEY_CALLER_IDENTITY, mPendingIntent);
addAccountOptions.putBoolean(EXTRA_HAS_MULTIPLE_USERS,
hasMultipleUsers(this));
AccountManager.get(this).addAccount(
type,
null, /* authTokenType */
null, /* requiredFeatures */
addAccountOptions,
null,
mCallback,
null /* handler */);
}
public boolean hasMultipleUsers(Context context) {
return ((UserManager) context.getSystemService(Context.USER_SERVICE))
.getUsers().size() > 1;
}
/**
* Callback setting google account.
*/
private AccountManagerCallback<Bundle> mCallback = new
AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
try {
Bundle bundle = future.getResult();
Intent intent = (Intent) bundle.get(AccountManager.KEY_INTENT);
if (intent != null) {
Bundle addAccountOptions = new Bundle();
addAccountOptions.putParcelable(KEY_CALLER_IDENTITY, mPendingIntent);
addAccountOptions.putBoolean(EXTRA_HAS_MULTIPLE_USERS,
hasMultipleUsers(KSWarning.this));
intent.putExtras(addAccountOptions);
startActivityForResult(intent, 0);
}
} catch (OperationCanceledException e) {
} catch (IOException e) {
} catch (AuthenticatorException e) {
}
}
};
我們通過調用setupAccount()將帳戶類型傳遞進去就能夠了。
這些代碼都是Framework中的代碼,我們略微修改了下就拿來用了。所以說,Framework是個寶藏,很多功能都可以在Framework中找到解決辦法,代碼就在那里,看你如何去發現。
以上。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈