本文实例讲述了Android实现软件列表的点击启动另外一个程序功能。分享给大家供大家参考,具体如下:
目前面世的许多软件中有这么一个功能:设备中安装了哪些软件,他们会以一个软件列表清单的形式向用户展示出来。
今天我们就来实现这一功能:
运行环境: motorola defy+ 系统2.3.6
主要 API : PackageInfo,PackageManager,LayoutInflater,ApplicationInfo
PackageManger类,它的主要职责是管理应用程序包。 通过它,我们就可以获取应用程序信息
通过PackageManager获取应用程序相关信息,再通过listView显示出相应信息。
直接上主要代码了
public class AppListView extends LinearLayout implements OnItemClickListener{
private final static String TAG = "AppListView";
private ListView mListView;
private TextView mTvTitle;
private List<AppInfo> mAppList;
private Context mContext;
private LayoutInflater mInflater;
private PackageManager mPacManager;
public AppListView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public AppListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
public AppListView(Context context)
{
super(context);
init(context);
}
private void init(Context c)
{
mContext = c;
mInflater = (LayoutInflater)c.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
this.addView(mInflater.inflate(R.layout.activity_main,null,false));
mListView = (ListView)this.findViewById(R.id.listView);
mTvTitle = (TextView)this.findViewById(R.id.title);
loadAppData();
mListView.setAdapter(new MyAdapter(c));
mListView.setOnItemClickListener(this);
Log.d(TAG, "一共"+mAppList.size());
}
// 加载应用软件数据 软件名称,包名,对应的图标等等
private void loadAppData()
{
if(mAppList != null){
mAppList.clear();
}else{
mAppList = new ArrayList<AppInfo>();
}
mPacManager = mContext.getPackageManager();
List<PackageInfo> packages = mPacManager.getInstalledPackages(0);
for(int i=0; i<packages.size(); i++){
PackageInfo pi = packages.get(i);
AppInfo ai = new AppInfo();
ai.packageName = pi.packageName;
ai.appName = pi.applicationInfo.loadLabel(mPacManager).toString();
ai.appIcon = pi.applicationInfo.loadIcon(mPacManager);
mAppList.add(ai);
}
mTvTitle.setText("本机所安装的软件总数:"+packages.size()+"个");
}
// 为ListView自定义适配器
class MyAdapter extends BaseAdapter
{
public MyAdapter(Context c)
{
mContext = c;
}
@Override
public int getCount() {
return mAppList == null?0:mAppList.size();
}
@Override
public Object getItem(int arg0) {
return mAppList == null?null:mAppList.get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
View view;
if(arg1 == null){
view = mInflater.inflate(R.layout.app_list_item, null);
}else{
view = arg1;
}
AppInfo ai = (AppInfo)getItem(arg0);
ImageView appIcon = (ImageView)view.findViewById(R.id.appIcon);
TextView appName = (TextView)view.findViewById(R.id.appName);
TextView appPackage = (TextView)view.findViewById(R.id.appPackage);
appIcon.setImageDrawable(ai.appIcon);
appName.setText(ai.appName);
appPackage.setText(ai.packageName);
return view;
}
}
// 处理ListView的item的点击操作,我这里是启动该应用程序
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Toast.makeText(mContext, arg2+"", Toast.LENGTH_SHORT).show();
// 获取本次item的包名
String packName = mAppList.get(arg2).packageName;
// 启动此程序
Intent intent = mPacManager.getLaunchIntentForPackage(packName);
mContext.startActivity(intent);
}
// 软件载体
public class AppInfo {
// 软件名称
public String appName="";
// 软件包名
public String packageName="";
// 软件图标
public Drawable appIcon=null;
}
}
public abstract Intent getLaunchIntentForPackage (String packageName)
这个方法通过包名返回一个Intent , 然后通过StartActivity(Intent)启动应用程序
完整实例代码点击此处本站下载。
下面是程序运行的效果图:
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android控件用法总结》、《Android视图View技巧总结》、《Android文件操作技巧汇总》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android编程之activity操作技巧总结》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》及《Android资源操作技巧汇总》
希望本文所述对大家Android程序设计有所帮助。
您可能感兴趣的文章:Android编程实现应用程序开机自启动的方法Android编程实现在一个程序中启动另一个程序的方法Android程序启动时出现黑屏问题的解决方法Android使用Intent启动其他非系统应用程序的方法Android中使用am命令实现在命令行启动程序详解Android中通过外部程序启动App的三种方法Android adb.exe程序启动不起来 具体解决方法Android开机自启动程序详解Android判断程序是否第一次启动