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>
分享到:
相关推荐
里面有2个源码包,分别用两种方式获得系统所安装的应用程序,并用listview和gridview两种布局方式分别显示出来。 通过遍历List,里面的每一个ResolveInfo就是一个应用的 信息,将应用显示出来。
综上所述,"JAVA查看安装软件列表(axun)"是一个实用的Java应用程序,它利用操作系统API或第三方库来获取并展示已安装软件的详细信息。这样的程序对于系统管理和自动化任务具有很高的价值,但也需要注意跨平台和隐私...
在Android开发中,有时我们需要创建一个对话框(Dialog)来展示一些信息或提供用户交互,例如,显示系统已安装的应用程序列表。在这种情况下,我们通常会利用Dialog与GridView的组合来实现这一功能。GridView是一种...
- 使用CrossOver安装的部分Windows应用程序可能会出现错误提示或乱码等问题。这些问题往往需要开发者进行修复,普通用户可以通过提交问题报告的形式反馈给官方,但最终能否解决问题取决于开发者的响应。 #### 结论...
在C#编程环境中,开发WPF(Windows Presentation Foundation)应用程序时,有时我们需要获取用户的系统上已安装软件的信息,以便展示给用户或者进行某些系统分析。本文将深入探讨如何利用C#来读取注册表,获取并展示...
标题“获取本机所有已安装的软件”涉及的是在计算机系统中检索已安装应用程序的过程,这对于系统维护、软件管理或程序开发来说都是重要的任务。在Windows操作系统中,这个过程可以通过不同的方式来实现。 首先,...
在Android开发中,获取系统所有应用程序列表并实现点击启动应用是一项常见的需求,这通常涉及到对Android系统的应用管理和Intent机制的理解。下面将详细讲解这个过程。 首先,我们需要理解Android权限。在...
根据提供的文件信息,我们可以推断出文章主要讨论的是如何在Windows系统中检测应用程序的安装情况,并且当检测到新安装的应用程序时,如何通过特定的方法(即“提示上升”)来提醒用户进行相应的设置操作。...
一个安卓开发的小例子 显示系统安装的应用程序
在安卓系统中,查询并操作已安装的应用程序是常见的需求,尤其对于开发者和高级用户来说,这是一项必备技能。本文将深入探讨如何查询手机上的应用程序以及如何通过包名来启动这些应用程序。 首先,我们需要理解“包...
[VS2005]解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题” 今天在准备发布用VS2005写的那个程序时,拷贝到我同事机器上,双击突然出现了“由于应用程序的配置不正确,...
首先,我们要了解在Android系统中,应用程序的信息存储在系统的Package Manager服务中。通过调用`PackageManager`类提供的方法,我们可以获取到设备上所有已安装应用的信息。`PackageManager`是Android SDK提供的一...
标题中的“如何获取已安装应用程序的列表”是一个关于在Windows操作系统中检索已安装软件信息的话题。这通常涉及到访问系统注册表或使用特定的API函数来收集数据,这些数据随后可以显示在类似“添加/删除程序”的...
要求在一个Activity中显示两个列表(用户应用程序列表和系统应用的列表) 用一个ListView列表,显示Android系统中安装的应用程序信息 (包括本程序的图标,程序名...用另一个ListView显示系统应用程序列表不加卸载按钮
在使用计算机时,我们有时会遇到这样的情况:尝试卸载某个程序后重新安装,系统却提示“此程序已存在,不能重复安装”。这种问题可能是由于多种原因造成的,下面将详细探讨这些问题并提供相应的解决方法。 首先,...
在Android操作系统中,应用列表和权限列表是两个关键的概念,它们构成了系统管理和控制应用程序的基础。本文将深入探讨如何获取Android应用程序列表以及如何获取这些应用程序的权限列表。 首先,让我们了解如何获取...
它提供了丰富的接口来管理设备上的应用程序,包括安装、卸载以及查询应用信息等。 首先,我们需要创建一个`PackageManager`对象,可以通过`getPackageManager()`方法从`Context`获取。例如: ```java ...
总的来说,Android App不显示在最近使用过的应用程序列表中通常是由于开发者对Activity的配置或者系统层面的问题导致的。通过检查和调整相关设置,大部分情况下可以解决问题。如果遇到难以解决的情况,与开发者沟通...
标题 "应用程序无法启动,因为应用程序的并行配置不正确" 是一个常见的错误提示,通常出现在Windows操作系统中,当用户尝试运行某些依赖于特定版本的.NET Framework或其他组件的应用程序时。这个错误表明应用程序的...