1.java代码
package eoe.appshow;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
public class AppShowActivity extends Activity {
ListView lv;
MyAdapter adapter;
ArrayList<HashMap<String, Object>> items = new ArrayList<HashMap<String, Object>>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView)findViewById(R.id.lv);
//得到PackageManager对象
PackageManager pm = getPackageManager();
//得到系统安装的所有程序包的PackageInfo对象
//List<ApplicationInfo> packs = pm.getInstalledApplications(0);
List<PackageInfo> packs = pm.getInstalledPackages(0);
for(PackageInfo pi:packs)
{
HashMap<String, Object> map = new HashMap<String, Object>();
//显示用户安装的应用程序,而不显示系统程序
// if((pi.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)==0&&
// (pi.applicationInfo.flags&ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)==0)
// {
// //这将会显示所有安装的应用程序,包括系统应用程序
// map.put("icon", pi.applicationInfo.loadIcon(pm));//图标
// map.put("appName", pi.applicationInfo.loadLabel(pm));//应用程序名称
// map.put("packageName", pi.applicationInfo.packageName);//应用程序包名
// //循环读取并存到HashMap中,再增加到ArrayList上,一个HashMap就是一项
// items.add(map);
// }
//这将会显示所有安装的应用程序,包括系统应用程序
map.put("icon", pi.applicationInfo.loadIcon(pm));//图标
map.put("appName", pi.applicationInfo.loadLabel(pm));//应用程序名称
map.put("packageName", pi.applicationInfo.packageName);//应用程序包名
//循环读取并存到HashMap中,再增加到ArrayList上,一个HashMap就是一项
items.add(map);
}
/**
* 参数:Context
* ArrayList(item的集合)
* item的layout
* 包含ArrayList中的HashMap的key的数组
* key所对应的值的相应的控件id
*/
adapter = new MyAdapter(this, items, R.layout.piitem,
new String[]{"icon", "appName", "packageName"},
new int[]{R.id.icon, R.id.appName, R.id.packageName});
lv.setAdapter(adapter);
}
}
class MyAdapter extends SimpleAdapter
{
private int[] appTo;
private String[] appFrom;
private ViewBinder appViewBinder;
private List<? extends Map<String, ?>> appData;
private int appResource;
private LayoutInflater appInflater;
public MyAdapter(Context context, List<? extends Map<String, ?>> data,
int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
appData = data;
appResource = resource;
appFrom = from;
appTo = to;
appInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public View getView(int position, View convertView, ViewGroup parent){
return createViewFromResource(position, convertView, parent, appResource);
}
private View createViewFromResource(int position, View convertView, ViewGroup parent, int resource){
View v;
if(convertView == null)
{
v = appInflater.inflate(resource, parent,false);
final int[] to = appTo;
final int count = to.length;
final View[] holder = new View[count];
for(int i = 0; i < count; i++)
{
holder[i] = v.findViewById(to[i]);
}
v.setTag(holder);
}else
{
v = convertView;
}
bindView(position, v);
return v;
}
private void bindView(int position, View view)
{
final Map dataSet = appData.get(position);
if(dataSet == null)
{
return;
}
final ViewBinder binder = appViewBinder;
final View[] holder = (View[])view.getTag();
final String[] from = appFrom;
final int[] to = appTo;
final int count = to.length;
for(int i = 0; i < count; i++)
{
final View v = holder[i];
if(v != null)
{
final Object data = dataSet.get(from[i]);
String text = data == null ? "":data.toString();
if(text == null)
{
text = "";
}
boolean bound = false;
if(binder != null)
{
bound = binder.setViewValue(v, data, text);
}
if(!bound)
{
/**
* 自定义适配器,关在在这里,根据传递过来的控件以及值的数据类型,
* 执行相应的方法,可以根据自己需要自行添加if语句。另外,CheckBox等
* 集成自TextView的控件也会被识别成TextView,这就需要判断值的类型
*/
if(v instanceof TextView)
{
//如果是TextView控件,则调用SimpleAdapter自带的方法,设置文本
setViewText((TextView)v, text);
}else if(v instanceof ImageView){
//如果是ImageView控件,调用自己写的方法,设置图片
setViewImage((ImageView)v, (Drawable)data);
}else{
throw new IllegalStateException(v.getClass().getName() + " is not a " + "view that can be bounds by this SimpleAdapter");
}
}
}
}
}
public void setViewImage(ImageView v, Drawable value){
v.setImageDrawable(value);
}
}
2. main.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/lv" android:layout_width="fill_parent"
android:layout_height="fill_parent">
</ListView>
</LinearLayout>
3.piitem.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/icon"
android:layout_width="48dip"
android:layout_height="48dip" />
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/appName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/packageName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
分享到:
相关推荐
本篇文章将深入探讨如何使用C#通过注册表来获取系统中已安装的应用程序的相关信息。 首先,我们需要了解Windows系统中安装的应用程序信息通常存储在`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion...
综上所述,"JAVA查看安装软件列表(axun)"是一个实用的Java应用程序,它利用操作系统API或第三方库来获取并展示已安装软件的详细信息。这样的程序对于系统管理和自动化任务具有很高的价值,但也需要注意跨平台和隐私...
在Android开发中,有时我们需要创建一个对话框(Dialog)来展示一些信息或提供用户交互,例如,显示系统已安装的应用程序列表。在这种情况下,我们通常会利用Dialog与GridView的组合来实现这一功能。GridView是一种...
了解已安装的程序可以帮助用户管理软件,例如卸载不再使用的应用程序,检查是否有更新,或者确保软件兼容性。 综上所述,掌握如何查看和理解系统信息,管理进程,检查系统设备以及了解已安装的程序,对于有效地使用...
- 使用CrossOver安装的部分Windows应用程序可能会出现错误提示或乱码等问题。这些问题往往需要开发者进行修复,普通用户可以通过提交问题报告的形式反馈给官方,但最终能否解决问题取决于开发者的响应。 #### 结论...
在C#编程环境中,开发WPF(Windows Presentation Foundation)应用程序时,有时我们需要获取用户的系统上已安装软件的信息,以便展示给用户或者进行某些系统分析。本文将深入探讨如何利用C#来读取注册表,获取并展示...
标题“获取本机所有已安装的软件”涉及的是在计算机系统中检索已安装应用程序的过程,这对于系统维护、软件管理或程序开发来说都是重要的任务。在Windows操作系统中,这个过程可以通过不同的方式来实现。 首先,...
在Android开发中,获取系统所有应用程序列表并实现点击启动应用是一项常见的需求,这通常涉及到对Android系统的应用管理和Intent机制的理解。下面将详细讲解这个过程。 首先,我们需要理解Android权限。在...
在安卓系统中,查询并操作已安装的应用程序是常见的需求,尤其对于开发者和高级用户来说,这是一项必备技能。本文将深入探讨如何查询手机上的应用程序以及如何通过包名来启动这些应用程序。 首先,我们需要理解“包...
[VS2005]解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题” 今天在准备发布用VS2005写的那个程序时,拷贝到我同事机器上,双击突然出现了“由于应用程序的配置不正确,...
然后在搜索框(search)中填写你需要的软件名称搜索即可,或者在软件分类和推荐软件列表中找到你要安装的软件点击下载安装即可,如果是免费软件会显示为“Free”,如果是收费软件的话会提示软件的费用为“$xx”。...
标题中的“如何获取已安装应用程序的列表”是一个关于在Windows操作系统中检索已安装软件信息的话题。这通常涉及到访问系统注册表或使用特定的API函数来收集数据,这些数据随后可以显示在类似“添加/删除程序”的...
在使用计算机时,我们有时会遇到这样的情况:尝试卸载某个程序后重新安装,系统却提示“此程序已存在,不能重复安装”。这种问题可能是由于多种原因造成的,下面将详细探讨这些问题并提供相应的解决方法。 首先,...
它提供了丰富的接口来管理设备上的应用程序,包括安装、卸载以及查询应用信息等。 首先,我们需要创建一个`PackageManager`对象,可以通过`getPackageManager()`方法从`Context`获取。例如: ```java ...
总的来说,Android App不显示在最近使用过的应用程序列表中通常是由于开发者对Activity的配置或者系统层面的问题导致的。通过检查和调整相关设置,大部分情况下可以解决问题。如果遇到难以解决的情况,与开发者沟通...
“apploc.msi”是这个转换工具的安装文件,它采用Microsoft Installer(MSI)格式,这是一种用于安装、配置和卸载Windows应用程序的标准技术。通过运行这个MSI文件,用户可以在日文系统中安装并激活转换工具。安装...
这类文件通常使用INI格式,包含键值对,用于保存和读取应用程序的配置信息。用户可以编辑这个文件以调整安装器的行为。 综上所述,这个“软件自动安装器”是一个强大的工具,能简化软件安装和系统封装的过程,提高...
- 在安装过程中,确保关闭所有其他正在运行的应用程序,以防止冲突。 - 安装前检查计算机硬件和操作系统版本,确保满足软件的系统需求。 - 为了数据安全,定期备份重要飞行数据,以防意外丢失。 - 如果在安装或...
注册表是Windows系统中存储配置数据的重要数据库,其中`HKEY_LOCAL_MACHINE\Software`分支包含了系统及所有用户的软件安装记录。 在Windows中,`bat`命令通常结合系统内部命令和外部程序来完成自动化任务。在这个...
一个安卓开发的小例子 显示系统安装的应用程序