下面是自己写的一个简单例子,就是获取到手机上所有应用的包名,然后ListView展示出来,并通过ListView的Item触发事件来实现跳转到其它app的功能。
public class AndroidJump extends Activity{
private Button b1;
private List<PackageInfo> pkinfoList=null;
private List<String> appNamelist;
private ListView lv;
private ArrayAdapter<String> adapter;
private Context context;
private PackageManager pm=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jump);
appNamelist = new ArrayList<String>();
context = getApplicationContext();
b1 = (Button) findViewById(R.id.jumpinto_otherapp);
b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pm = context.getPackageManager();
pkinfoList = pm.getInstalledPackages(0);
for(PackageInfo pif:pkinfoList){
String name = pif.applicationInfo.loadLabel(pm).toString();
appNamelist.add(name);
}
adapter.notifyDataSetChanged();
}
});
lv = (ListView) findViewById(R.id.lv);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,appNamelist);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
String name = (String)((ListView)arg0).getItemAtPosition(arg2);
for(PackageInfo pif:pkinfoList){
if(name.equals(pif.applicationInfo.loadLabel(pm).toString())){
startAPP(pif.packageName);
}
}
}
});
}
private void startAPP(String appPackageName){
// 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等
PackageInfo packageinfo = null;
try {
packageinfo = getPackageManager().getPackageInfo(appPackageName, 0);
} catch (NameNotFoundException e) {
Log.d("HelloWorld", appPackageName+" Exception:"+e);
e.printStackTrace();
}
if (packageinfo == null) {
return;
}
// 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(packageinfo.packageName);
// 通过getPackageManager()的queryIntentActivities方法遍历
List<ResolveInfo> resolveinfoList = getPackageManager()
.queryIntentActivities(resolveIntent, 0);
ResolveInfo resolveinfo = resolveinfoList.iterator().next();
if (resolveinfo != null) {
// packagename = 参数packname
String packageName = resolveinfo.activityInfo.packageName;
// 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname]
String className = resolveinfo.activityInfo.name;
// LAUNCHER Intent
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
// 设置ComponentName参数1:packagename参数2:MainActivity路径
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
}
}
}