AndroidのアカウントとAccountManagerの例を見てみましょう。

を参照してください。

例1: アカウントと AccountManager

この例は、以下の概念を学ぶのに役立ちます。

  1. AndroidのAccountManagerを初期化する方法。
  2. アンドロイドデバイスの全アカウントの配列を取得する方法
  3. Android でアカウントを取得し、ListView に表示する方法。

このサンプルは、以下のファイルから構成されます。

  • ListItem.java
  • ListItemAdapter.java`(リストアイテムアダプター)。
  • MainActivity.java です。

ステップ1:プロジェクトの作成

  1. AndroidStudio` IDEを起動します。
    1. "File-->New-->Project "で新しいプロジェクトを作成します。

ステップ2: 依存関係の追加

このプロジェクトでは、特別な依存関係は必要ありません。

ステップ3: レイアウトの設計

*(a). activity_main.xml を作成します。

activity_main.xml という名前のファイルを作成し、以下のようにデザインする。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView android:id="@+id/listview1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

*(b). list_item.xml ファイルを作成します。

list_item.xml`という名前のファイルを作成し、以下のようにデザインする。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView android:id="@+id/list_item_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <TextView android:id="@+id/list_item_type"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

ステップ4: コードの記述

以下のようにコードを記述する。

*(a). ListItem.java`を作成する。

ListItem.java`という名前のファイルを作成する。

Listアイテムを表現するクラスを作成する。

public class ListItem { 

ListItemのプロパティを追加する

    public String name;
    public String type;

以下はコードの一部です。

package com.bgstation0.android.sample.account_;

public class ListItem { 
    //end
    public String name;
    public String type;
    //end
}

*(b). ListItemAdapter.java`を作成します。

ListItemAdapter.java`という名前のファイルを作成する。

ArrayAdapter` を継承したアダプタクラスを作成する。

public class ListItemAdapter extends ArrayAdapter<ListItem> {

LayoutInflater を null で初期化します。

    LayoutInflater mInflater = null;    // mInflaternullŏ.

コンストラクタに Context, Integer, ListItem` オブジェクトを渡して、パラメータとして受け取る。

    public ListItemAdapter(Context context, int resource, ListItem[] objects){

スーパークラスのコンストラクタに渡す。

        super(context, resource, objects);  

context.getSystemService() を使って LayoutInflater を初期化します。LAYOUT_INFLATER_SERVICE を渡します。

        mInflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);

getView()`関数をオーバーライドします。

    @Override
    public View getView(int position, View convertView, ViewGroup parent){

View` オブジェクトが NULL かどうかをチェックします。その時だけ膨らませる。

        if (convertView == null){
            convertView = mInflater.inflate(R.layout.list_item, null);  // nullȂ琶.
        }

ウィジェットを参照し、その値を設定します。

        TextView tvName = (TextView)convertView.findViewById(R.id.list_item_name);  // tvName.
        tvName.setText(getItem(position).name); // name
        TextView tvType = (TextView)convertView.findViewById(R.id.list_item_type);  // tvType.
        tvType.setText(getItem(position).type); // type

以下がそのコードです。

package com.bgstation0.android.sample.account_;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class ListItemAdapter extends ArrayAdapter<ListItem> {
//end
    LayoutInflater mInflater = null;    // mInflaternullŏ.
    //end
    public ListItemAdapter(Context context, int resource, ListItem[] objects){
        //end
        super(context, resource, objects);  
        //end
        mInflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        //end
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        //end
        if (convertView == null){
            convertView = mInflater.inflate(R.layout.list_item, null);  // nullȂ琶.
        }
        //end
        TextView tvName = (TextView)convertView.findViewById(R.id.list_item_name);  // tvName.
        tvName.setText(getItem(position).name); // name
        TextView tvType = (TextView)convertView.findViewById(R.id.list_item_type);  // tvType.
        tvType.setText(getItem(position).type); // type
        //end
        return convertView; // convertView.
    }

}

*(c). MainActivity.java を作成します。

MainActivity.java`という名前のファイルを作成します。

Android.accounts.Accountandroid.accounts.AccountManager` クラスを含むインポートを追加します。

import java.util.ArrayList;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;

MainActivityを作成します。Activity クラスを拡張します。

public class MainActivity extends Activity {

onCreaet()` 関数をオーバーライドします。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

get() メソッドを呼び出して AccountManager を初期化し、Context` を渡します。

        AccountManager accountManager = AccountManager.get(this);   // accountManager

ListItem` オブジェクトの ArrayList を作成する。

        ArrayList<ListItem> list = new ArrayList<ListItem>();

getAccounts()` メソッドを呼び出して、デバイスに登録されているすべてのアカウントを取得します。

        Account[] accounts = accountManager.getAccounts();

すべてのアカウントをListに追加します。

        for (Account account : accounts){
            ListItem item = new ListItem();
            item.name = account.name;
            item.type = account.type;   
            list.add(item); 
        }

ListViewを参照する

        ListView listView1 = (ListView)findViewById(R.id.listview1);

アダプタを設定する

        ListItem[] array = new ListItem[list.size()];   // array𐶐
        ListItemAdapter listItemAdapter = new ListItemAdapter(this, R.layout.list_item, list.toArray(array));   // arrayAdapter𐶐.
        listView1.setAdapter(listItemAdapter);  // listItemAdapter

以下は、コード全体です。

package com.bgstation0.android.sample.account_;
import java.util.ArrayList;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;
//end
public class MainActivity extends Activity {
//end
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //end
        AccountManager accountManager = AccountManager.get(this);   // accountManager
        //end

        ArrayList<ListItem> list = new ArrayList<ListItem>();
        //end
        Account[] accounts = accountManager.getAccounts();
        //end
        for (Account account : accounts){
            ListItem item = new ListItem();
            item.name = account.name;
            item.type = account.type;   
            list.add(item); 
        }
        //end
        ListView listView1 = (ListView)findViewById(R.id.listview1);
        //end

        ListItem[] array = new ListItem[list.size()];   // array𐶐
        ListItemAdapter listItemAdapter = new ListItemAdapter(this, R.layout.list_item, list.toArray(array));   // arrayAdapter𐶐.
        listView1.setAdapter(listItemAdapter);  // listItemAdapter
        //end

    }

}

実行

ソースコードをAndroidプロジェクトにコピーし、ビルドして実行します。

例2:AccountManagerの初期化

このチュートリアルでは、以下の概念を学ぶことができます。

  1. AccountManager の取得方法

この例では、以下のファイルから構成されます。

  • MainActivity.java です。

ステップ1:プロジェクトの作成

  1. AndroidStudio` IDEを開く。
    1. "File-->New-->Project "で新しいプロジェクトを作成します。

ステップ2: 依存関係

依存関係は必要ありません。

ステップ3: デザインレイアウト

*(a). activity_main.xml を作成します。

activity_main.xml という名前のファイルを作成し、以下のようにデザインする。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

ステップ4: コードの記述

以下のようにコードを書いてください。

*(a). MainActivity.java.

MainActivity.java`という名前のファイルを作成します。

get()` メソッドにコンテキストを渡すだけです。

        AccountManager accountManager = AccountManager.get(this);

そして、それをstringにキャストして表示します。

        Toast.makeText(this, "accountManager = " + accountManager.toString(), Toast.LENGTH_LONG).show();    // accountManagero.

以下がそのコードです。

package com.bgstation0.android.sample.accountmanager_;

import android.accounts.AccountManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AccountManager accountManager = AccountManager.get(this);
        //end
        Toast.makeText(this, "accountManager = " + accountManager.toString(), Toast.LENGTH_LONG).show();    // accountManagero.
        //end
    }

}

実行

ソースコードをAndroidプロジェクトにコピーし、ビルドして実行します。

例3:AccountManagerの取得と表示

このチュートリアルでは、以下の概念を学ぶことができます。

    1. AccountManagerを取得し、それをトーストメッセージで表示する方法

この例は、以下のファイルから構成されます。

  • MainActivity.java です。

ステップ1:プロジェクトの作成

  1. AndroidStudio` IDEを起動します。
    1. "File-->New-->Project "で新しいプロジェクトを作成します。

ステップ2: 依存関係の追加

ステップ3: レイアウトの設計

*(a). activity_main.xml を作成します。

activity_main.xmlというファイルを作成し、以下のようにデザインします。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

ステップ4: コードの記述

以下のようにコードを書いてください。

*(a). MainActivity.java を作成する。

MainActivity.java`という名前のファイルを作成する。

AccountManagerをインポートする。

import android.accounts.AccountManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

MainActivityを作成します。

public class MainActivity extends Activity {

onCreateをオーバーライドします。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

AccountManager.get()を呼び出し、コンテキストを渡して文字列にキャストし、Toastメッセージで表示します。

        Toast.makeText(this, AccountManager.get(this).toString(), Toast.LENGTH_LONG).show();    // AccountManager.get(this)g[Xg.

以下がコード全体です。

package com.bgstation0.android.sample.accountmanager_;
import android.accounts.AccountManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
//end
public class MainActivity extends Activity {
//end
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //end
        Toast.makeText(this, AccountManager.get(this).toString(), Toast.LENGTH_LONG).show();    // AccountManager.get(this)g[Xg.
        //end
    }

}

実行

ソースコードをAndroidプロジェクトにコピーし、ビルドして実行します。

例 4: すべてのアカウントをリストアップする

この例では、以下のファイルから構成されます。

  • ListItem.java
  • ListItemAdapter.java`。
  • MainActivity.java です。

ステップ1: プロジェクトの作成

  1. AndroidStudio` IDEを起動します。
    1. "File-->New-->Project "で新しいプロジェクトを作成します。

ステップ2: 依存関係

依存関係は必要ありません。

ステップ3: デザインレイアウト

*(a). activity_main.xml を作成します。

activity_main.xml という名前のファイルを作成し、以下のようにデザインする。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView android:id="@+id/listview1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

*(b). list_item.xml ファイルを作成します。

list_item.xml`という名前のファイルを作成し、以下のようにデザインする。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView android:id="@+id/list_item_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

ステップ4: コードの記述

以下のようにコードを記述する。

*(a). ListItem.java`を作成する。

ListItem.java`という名前のファイルを作成する。

以下はコードの全文です。

package com.bgstation0.android.sample.accountmanager_;

// XgACeNXListItem
public class ListItem { // ListItem̒`.
    public String name; // O.
}

*(b). ListItemAdapter.java`を作成する。

ListItemAdapter.java`という名前のファイルを作成する。

以下がそのコードです。

package com.bgstation0.android.sample.accountmanager_;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

// ListItempA_v^[ListItemAdapter
public class ListItemAdapter extends ArrayAdapter<ListItem> {

    // otB[h̒`.
    LayoutInflater mInflater = null;    // mInflaternullŏ.

    // RXgN^
    public ListItemAdapter(Context context, int resource, ListItem[] objects){
        super(context, resource, objects);  // eRXgN^.
        mInflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);  // mInflater̎擾.
    }

    // ACẽJX^}CY.
    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        // convertViewnull̎.
        if (convertView == null){
            convertView = mInflater.inflate(R.layout.list_item, null);  // nullȂ琶.
        }
        TextView tvName = (TextView)convertView.findViewById(R.id.list_item_name);  // tvName擾.
        tvName.setText(getItem(position).name); // nameZbg.
        return convertView; // convertViewԂ.
    }

}

*(c). MainActivity.java を作成する。

MainActivity.java`という名前のファイルを作成する。

以下がそのコードです。

package com.bgstation0.android.sample.accountmanager_;

import java.util.ArrayList;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // AccountManagerIuWFNg擾, .
        AccountManager accountManager = AccountManager.get(this);   // accountManagerɊi[.

        // AJEgXg̎擾.
        ArrayList<ListItem> list = new ArrayList<ListItem>();   // list𐶐.
        Account[] accounts = accountManager.getAccounts();  // accountManager.getAccountsaccounts擾.
        for (Account account : accounts){   // accountsaccountôvfJԂ.
            ListItem item = new ListItem(); // item𐶐.
            item.name = account.name;   // item.nameaccount.nameZbg.
            list.add(item); // list.additemlj.
        }

        // listView1̎擾.
        ListView listView1 = (ListView)findViewById(R.id.listview1);    // listView1擾.

        // ListItemAdapter̐.
        ListItem[] array = new ListItem[list.size()];   // array𐶐.
        ListItemAdapter listItemAdapter = new ListItemAdapter(this, R.layout.list_item, list.toArray(array));   // arrayAdapter𐶐.
        listView1.setAdapter(listItemAdapter);  // listItemAdapterZbg.

    }

}

実行

ソースコードをAndroidプロジェクトにコピーし、ビルドして実行します。

例5:タイプ別にアカウントを取得する

このチュートリアルでは、以下の概念を学ぶことができます。

    1. Android端末のアカウントを種類別に取得する方法

この例では、以下のファイルから構成されています。

  • ListItem.java
  • ListItemAdapter.java`(リストアイテムアダプター)。
  • MainActivity.java です。

ステップ1: プロジェクトの作成

  1. AndroidStudio` IDEを起動します。
    1. "File-->New-->Project "で新しいプロジェクトを作成します。

ステップ2: 依存関係の追加

ステップ3: レイアウトの設計

*(a). activity_main.xml を作成します。

activity_main.xmlという名前のファイルを作成し、以下のようにデザインします。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView android:id="@+id/listview1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

*(b). list_item.xml ファイルを作成します。

list_item.xml`という名前のファイルを作成し、以下のようにデザインする。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView android:id="@+id/list_item_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <TextView android:id="@+id/list_item_type"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

ステップ4: コードの記述

以下のようにコードを記述する。

*(a). ListItem.java`を作成する。

ListItem.java`という名前のファイルを作成する。

簡単なモデルクラスを作成する。

public class ListItem {
    public String name;
    public String type; 
}

以下がそのコードです。

package com.bgstation0.android.sample.accountmanager_;

public class ListItem {
    public String name;
    public String type; 
}
//end

*(b). ListItemAdapter.java`を作成します。

ListItemAdapter.java`という名前のファイルを作成する。

ArrayAdapter` を拡張する。

public class ListItemAdapter extends ArrayAdapter<ListItem> {

コンストラクタを作成する。

    public ListItemAdapter(Context context, int resource, ListItem[] objects){
        super(context, resource, objects);
        mInflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
    }

Override the getView() method. We inflate our list_item layout here:

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        // convertViewnull̎.
        if (convertView == null){
            convertView = mInflater.inflate(R.layout.list_item, null);
        }
        TextView tvName = (TextView)convertView.findViewById(R.id.list_item_name);  // tvName.
        tvName.setText(getItem(position).name); // name.
        TextView tvType = (TextView)convertView.findViewById(R.id.list_item_type);  // tvType.
        tvType.setText(getItem(position).type); // type.
        return convertView; // convertViewԂ.
    }

Here is the full code:

package com.bgstation0.android.sample.accountmanager_;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class ListItemAdapter extends ArrayAdapter<ListItem> {
//end
    //Initialize the <code>LayoutInflater</code> to null
    LayoutInflater mInflater = null;
    //end
    public ListItemAdapter(Context context, int resource, ListItem[] objects){
        super(context, resource, objects);
        mInflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
    }
    //end

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        // convertViewnull̎.
        if (convertView == null){
            convertView = mInflater.inflate(R.layout.list_item, null);
        }
        TextView tvName = (TextView)convertView.findViewById(R.id.list_item_name);  // tvName.
        tvName.setText(getItem(position).name); // name.
        TextView tvType = (TextView)convertView.findViewById(R.id.list_item_type);  // tvType.
        tvType.setText(getItem(position).type); // type.
        return convertView; // convertViewԂ.
    }
        //end

}

(c). MainActivity.java

Create a file named MainActivity.java:

Add your imports:

import java.util.ArrayList;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

Extend the Activity class:

public class MainActivity extends Activity 

Get the AccountManager instance:

        ArrayList<ListItem> list = new ArrayList<ListItem>();

If you want to get Accounts use the getAccounts() method

        //Account[] accounts = accountManager.getAccounts();    // accountManager.getAccounts()

To get the accounts by type use the getAccountsByType() method as shown below:

        Account[] accounts = accountManager.getAccountsByType("com.google");

Now loop through the accounts and add them to our List

        for (Account account : accounts){
            ListItem item = new ListItem();
            item.name = account.name;
            item.type = account.type;
            list.add(item);
        }

Prepare a ListView

        ListView listView1 = (ListView)findViewById(R.id.listview1);

Bind the accounts to our adapter and then the adapter to the ListView:

        ListItem[] array = new ListItem[list.size()];   // array𐶐.
        ListItemAdapter listItemAdapter = new ListItemAdapter(this, R.layout.list_item, list.toArray(array));   // arrayAdapter𐶐.
        listView1.setAdapter(listItemAdapter);  

Here is the full code

package com.bgstation0.android.sample.accountmanager_;

import java.util.ArrayList;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
//end
public class MainActivity extends Activity {
//end
//Override the onCreate():
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //end

        AccountManager accountManager = AccountManager.get(this);
        //end

        ArrayList<ListItem> list = new ArrayList<ListItem>();
        //end
        //Account[] accounts = accountManager.getAccounts();    // accountManager.getAccounts()
        //end
        Account[] accounts = accountManager.getAccountsByType("com.google");
        //end
        for (Account account : accounts){
            ListItem item = new ListItem();
            item.name = account.name;
            item.type = account.type;
            list.add(item);
        }
        //end

        ListView listView1 = (ListView)findViewById(R.id.listview1);
        //end

        ListItem[] array = new ListItem[list.size()];   // array𐶐.
        ListItemAdapter listItemAdapter = new ListItemAdapter(this, R.layout.list_item, list.toArray(array));   // arrayAdapter𐶐.
        listView1.setAdapter(listItemAdapter);  
        //end

    }

}

Run

Simply copy the source code into your Android Project,Build and Run.

Categorized in: