たぼさんの部屋

いちょぼとのんびり

パッケージから起動可能なインテントを調べて起動する(getLaunchIntentForPackage)

getLaunchIntentForPackegeを使う

f:id:donsuka_kk:20131002154648p:plain

  • ListViewでインストール済みのアプリを一覧表示
  • ListView#setOnItemClickListenerをセットしてアプリを起動。
Intent intent = getPackageManager().getLaunchIntentForPackage(String packageName);
startActivity(intent);

Main.java

package com.efolab.listofinstalled;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;

public class Main extends Activity {

	/** Called when the activity is first created. */
	Context context;
	LinearLayout layout;					
	
	ListView lv;
	ArrayList<Map<String,String>> collection;
	
	List<ApplicationInfo> list;
	@Override
	public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	
	    // TODO Auto-generated method stub
	    context = getApplicationContext();
	    layout = new LinearLayout(context);
	    layout.setOrientation(LinearLayout.VERTICAL);
	    
	    setContentView(layout);
	    
	    //ListView instatnce
	    lv = new ListView(context);
	    lv.setBackgroundColor(Color.BLACK);
	    layout.addView(lv);
	    
	    /*
	     * インストール済みのパッケージ検索
	     */
	    list = getInstalledPackageList();
	    
	    ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1);
	    for(int i=0;i<list.size();i++){
	    	adapter.add(list.get(i).packageName);
	    }
	    lv.setAdapter(adapter);
	    
	    /*
	     * ListViewの項目のクリックイベントを設定する
	     */
	    lv.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view, int position,
					long id) {
				try{
					//positionで選択された行数が取得できる
					String packageNm = list.get(position).packageName;
					/*
					 * getLaunchIntentForPackage
					 * を使ってアプリを起動する
					 */
					Intent intent = getPackageManager().getLaunchIntentForPackage(packageNm);
					startActivity(intent);
				}catch(Exception e){
					Toast.makeText(context, "起動できませんでした", Toast.LENGTH_SHORT).show();
				}
			}
		});
	}
	private List<ApplicationInfo> getInstalledPackageList() {
		PackageManager pm = getPackageManager();

		List<ApplicationInfo> list = pm
				.getInstalledApplications(PackageManager.GET_META_DATA);

		return list;
	}
}