在网上搜索了一会相关的实现代码,发现所有的文章都说是需要包名和类名。但是人家的程序,我们怎么可能知道哪个是第一个启动的Activity?所以,真正用在项目上,那种方法基本上没什么用的。于是查看官方文档,发现这样一个方法
1
public abstract Intent getLaunchIntentForPackage (String packageName)
英文原文:Return a “good” intent to launch a front-door activity in a package, for use for example to implement an “open” button when browsing through packages.大概意思就是返回一个程序入口的Intent,就是Java程序的Main方法。
这下简单了,直接startActivity(返回的intent)即可。
下面的代码基于前文Android得到系统已安装应用程序包列表方法 自定义ListView显示 PackageManager的使用,直接下载前文的包,把Main.java内容替换成以下就可以:
package com.pocketdigi;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
public class Main extends Activity {
/** Called when the activity is first created. */
ListView lv;
Adapter adapter;
ArrayList<HashMap<String, Object>> items = new ArrayList<HashMap<String, Object>>();
PackageManager pm;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView) findViewById(R.id.lv);
final PackageManager pm = getPackageManager();
// 得到PackageManager对象
List<PackageInfo> packs = pm
.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
// 得到系统 安装的所有程序包的PackageInfo对象
for (PackageInfo pi : packs) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("icon", pi.applicationInfo.loadIcon(pm));
// 图标
map.put("appName", pi.applicationInfo.loadLabel(pm));
// 应用名
map.put("packageName", pi.packageName);
// 包名
items.add(map);
// 循环读取存到HashMap,再增加到ArrayList.一个HashMap就是一项
}
adapter = new Adapter(this, items, R.layout.piitem, new String[] {
"icon", "appName", "packageName" }, new int[] { R.id.icon,
R.id.appName, R.id.packageName });
// 参数:Context,ArrayList(item的集合),item的layout,包含ArrayList中Hashmap的key的数组,key所对应的值相对应的控件id
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
String packageName = (String) items.get(position).get(
"packageName");
//取到点击的包名
Intent i = pm.getLaunchIntentForPackage(packageName);
//如果该程序不可启动(像系统自带的包,有很多是没有入口的)会返回NULL
if (i != null)
startActivity(i);
}
});
}
}
[align=left][/align]
原文:http://www.pocketdigi.com/20110728/427.html
分享到:
相关推荐
一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。 其中standard是系统默认的启动...
1.应用程序内的activity跳转 2.一个应用程序启动另一个应用程序(直接启动或者通过广播)
主要介绍了Android 中启动自己另一个程序的activity如何实现的相关资料,需要的朋友可以参考下
例如:如果你建立了一个能和用户朋友共享信息或图片的社会应用程序,实现Action-Send意图会成为你的最大利益,那样用户就可以从另一个程序中发起一个“分享”的行动,并且启动你的程序执行行动。
本节课程内容:Activity启动模式与跳转 Android中采用任务栈的形式来管Activity。栈是一种“先进后出”的数据结构。 Android中的任务栈 Task Stack in Android Activity的启动模式 Activity startup mode Activity...
Android提供了在一个App中启动另一个App中的Activity的能力,这使我们的程序很容易就可以调用其他程序的功能,从而就丰富了我们App的功能。比如在微信中发送一个位置信息,对方可以点击这个位置信息启动腾讯地图并...
Android应用程序的Activity启动过程简要介绍和学习计划
Activity和Service是应用程序的核心组件,程序框架层提供了一套完整的机制来协助应用程序启动Activity和Service
主要为大家详细介绍了Android利用Intent启动和关闭Activity的相关操作,感兴趣的小伙伴们可以参考一下
场景 点击第一个Activity中...启动另一个Activity 在第一个Activity中的按钮的点击事件中 Button secondActivityButton = (Button)findViewById(R.id.secondActivity); secondActivityButton.setOnClickListener(new
使用phonegap框架开发android应用程序,免不了需要涉及js与java原生代码的交互,自定义phonegap插件可以满足这个需求。 在本教程中,介绍了怎么使用phonegap插件跳转到另一个Android Activity
Android应用程序的Activity启动过程简要介绍和学习计划.docAndroid应用程序的Activity启动过程简要介绍和学习计划.docAndroid应用程序的Activity启动过程简要介绍和学习计划.docAndroid应用程序的Activity启动过程...
分析Android Activity的启动过程 对于Android Activity 的启动过程...根Activity一般就是指我们项目中的MainActivity,代表了一个android应用程序,一般也是在一个新的进程中启动起来。在Android系统中,所有的Activi
Activity启动和退出动画.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
开机启动一个一个Activity,并发出一个通知
把用户从一个Activity带到另一个Activity,必须使用一个Intent去指定你的应用程序“意图”去做的事。当你用startActivity()函数向系统传递一个Intent,系统就会利用这个Intent去界定和开启对应的应用程序组件。使用...
BroadcastReceiver中启动Activity,broadcast不会直接显示一个用户界面,而是启动一个activity来响应它们所接受到的信息或是使用 NotificationManager警示用户。Notification有很多方式能引起用户的注意。
1、启动app、查看控制台输出,发现依次触发onCreate、onStart、onResume这三个方法 2、点击按钮(弹窗风格的Activity),控制台输出onPause方法名 3、关掉上一步触发的弹窗,控制台输出onResume方法名 4、点击手机上的...
LogCat是Android中的命令行工具,用于获取程序从启动到关闭的日志信息。 Log类所输出的日志内容分为五个级别,分别对应Log类中的Log.v()、Log.d()、Log.i()、Log.w()、Log.e()静态方法。Android4.0新增加Assert比较...