スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

アプリケーションリストを表示

端末にインストールされている、アプリの一覧をリストに表示する
サンプルを作成してみた。

≪画面イメージ≫
アプリケーションリスト

メインとなるActivityでは、インストールされているアプリの一覧を取得し、
カスタマイズしたリスト(Iconとアプリ名を表示)を表示する。

【ListViewActivity】・・・リストを表示するActivity
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

public class ListViewActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.customlist);

/**
* インストールされているアプリ一覧の取得
*/
// PackageManagerの取得
PackageManager pManager = getPackageManager();

// メイン画面から起動できるアプリの一覧を取得
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);

// アプリケーション名 一覧の取得
List appNameList = pManager.queryIntentActivities(intent,
0);

// リストの作成
List listData = new ArrayList();
for (ResolveInfo rInfo : appNameList) {

// 表示する各アプリのIconを設定
CustomData data = new CustomData();
Context c = null;
try {
c = this.createPackageContext(rInfo.activityInfo.packageName,
Context.CONTEXT_RESTRICTED);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
Resources res = c.getResources();
Drawable drawable = res.getDrawable(rInfo.activityInfo
.getIconResource());
data.setDrawable(drawable);

// 各アプリ名を設定
data.setText(rInfo.loadLabel(pManager).toString());
listData.add(data);
}

CustomAdapter customAdapater = new CustomAdapter(this, 0, listData);

// アプリ一覧リストの作成
ListView listView = (ListView) findViewById(R.id.custom_list);
listView.setAdapter(customAdapater);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub

}
});

}
}



リスト1行に含まれているデータの定義を行う。

【CustomData】・・・リスト1行分のデータを定義(Iconとアプリ名)
import android.graphics.drawable.Drawable;

public class CustomData {

// Icon
private Drawable draw;
// アプリ名
private String text;

public void setDrawable(Drawable draw) {
this.draw = draw;
}

public Drawable getDrawable() {
return this.draw;
}

public void setText(String text) {
this.text = text;
}

public String getText() {
return this.text;
}

}



リストのデータのやり取りを行うアダプターを作成する。

【CustomAdapter】・・・カスタマイズしたリストのアダプター
import java.util.List;

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

public class CustomAdapter extends ArrayAdapter {
private LayoutInflater layoutInflater_;

public CustomAdapter(Context context, int textViewResourceId,
List objects) {
super(context, textViewResourceId, objects);
layoutInflater_ = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 特定の行(position)のデータを得る
CustomData item = (CustomData) getItem(position);

// convertViewは使い回しされている可能性があるのでnullの時だけ新しく作る
if (null == convertView) {
convertView = layoutInflater_.inflate(R.layout.listdata, null);
}

// CustomDataのデータをViewの各Widgetにセットする
ImageView img;
img = (ImageView) convertView.findViewById(R.id.img);
img.setImageDrawable(item.getDrawable());

TextView textView;
textView = (TextView) convertView.findViewById(R.id.text);
textView.setText(item.getText());

return convertView;
}
}



【customlist.xml】・・・リストを表示する画面レイアウト
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

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

</LinearLayout>



【listdata.xml】・・・リスト1行分のレイアウト
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<ImageView
android:id="@+id/img"
android:layout_width="50dp"
android:layout_height="50dp"
/>
<TextView
android:id="@+id/text"
android:choiceMode="singleChoice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>



以上で、最初の画面イメージのリストが表示される。

スポンサーサイト

コメント

非公開コメント

勉強の参考にさせていただいてます

突然失礼します.
Android開発初心者で当サイトを拝見させていただいてます.

私も実際に「アプリケーションリストを表示」するアプリを作ってみようと思い、とりあえずこのサイトのプログラムをコピペさせていただきました.しかし、多少のエラーがでてしまい、思うように実行されません.
わかる範囲で自分でバグは取った(リスト構造の辺り)のですが以下の箇所のエラーが分かりませんでした.

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub

「AdapterView」に何か付けないといけないみたいなのですが,わかりますか?もしも分かるのならば教えていただけらと思います.
また,大変恐縮ですが実際に動いたプログラムをzip等でいただけると助かります.
厚かましいお願いですがよろしくお願いします.
検索フォーム


カテゴリ
全記事表示リンク

全ての記事を表示する

広告
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。