端末に登録されているアカウント一覧を取得する [AccountManager]

Google のサービスをアプリから利用したい時に認証を行う必要があります。
認証を行う際にメールアドレスとパスワードを入れなければいけません。
認証としては当然ですね

Android 端末に Google アカウントが登録されていれば認証も簡単にできるんですが、
今回はアカウントリストを取得するということだけを目的としてサンプルアプリを作りたいと思います。


ひどいですね・・・アカウント一覧となると画面キャプチャがまともにお見せできません m(_ _)m





Android プロジェクトを新規作成します

省略・・・・

AndroidManifest.xml に許可の記述を追加します

<uses-permission android:name="android.permission.GET_ACCOUNTS" />


ソースコード



package org.caldia.android.sample.accountmanager;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.TextView;
/**
 * メイン画面
 * @author k-matsuda@caldia.org
 *
 */
public class MainActivity extends Activity {
    /**
     * アカウント情報を表示するテキストビュー
     */
    private TextView mAccountNameTextView;
    @Override
    public void onCreate(
            final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // アカウント情報を表示するテキストビューを取得します
        mAccountNameTextView = (TextView)findViewById(R.id.accountsTextView);
        mAccountNameTextView.setText(null);
        final GetAccountListTask task = new GetAccountListTask();
        task.execute("");
    }
    /**
     * アカウント情報を表示するテキストビューに文字列を追加します
     * @param text 追加する文字列
     */
    private void appendText(
            final String text) {
        mAccountNameTextView.append(text);
    }
    /**
     * 端末に保存されているアカウントを取得する
     * @author k-matsuda@caldia.org
     *
     */
    private class GetAccountListTask extends AsyncTask<String, String, Account[]> {
        @Override
        protected Account[] doInBackground(
                final String... params) {



            // アカウントマネージャを取得します
           
final AccountManager accountManager = AccountManager.get(getApplicationContext());


            if (params != null && 1 <= params.length && 0 < params[0].length()) {
                return accountManager.getAccountsByType(params[0]);
            } else {



                // アカウントを取得します
                return accountManager.getAccounts();


            }
        }
        @Override
        protected void onPostExecute(
                final Account[] result) {
            // パラメータチェック
            if (result == null) {
                appendText("アカウント情報がない、もしくは取得できませんでした.");
                return;
            }

            /*
             * テキストビューに文字列を追加します
             */
            // 取得したアカウント数
            final int count = result.length;
            final String format = "%3$d : %1$s <%2$s>\n";
            for (int i = 0; i < count; i++) {
                // アカウント取得
                final Account account = result[i];
                if (account == null) {
                    continue;
                }

    
                // アカウント名を取得します
                final String accountName = account.name;
                // アカウントタイプを取得します
                final String accountType = account.type;
                final String text = String.format(format, accountName, accountType, i);
                appendText(text);
            }
        }
    }
}



0 件のコメント:

コメントを投稿