2011-03-24 20 views
1

我从互联网上得到了这段代码,我想要获取手机上所有应用程序的列表,并通过网页上的评论来判断它的工作原理,但我似乎无法使其工作对我来说。它似乎是给我这个问题的getPacketManager()。有人可以看看代码,并向我解释我需要做些什么才能使它工作?如何获取应用程序的列表

这是我的全班...我无法得到它甚至运行,在3个位置有一个“getPackageManager()”它给我一个错误在屏幕左边说“方法getPackageManager ()是未定义的类型getApps”

package cians.app; 

import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.content.pm.PackageInfo; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class getApps{ 

class PInfo { 
private String appname = ""; 
private String pname = ""; 
private String versionName = ""; 
private int versionCode = 0; 
private Drawable icon; 
private void prettyPrint() { 
    System.out.print(appname + "\\t" + pname + "\\t" + versionName + "\\t"   +versionCode + "\\t"); 
} 
} 

private void listPackages() { 
ArrayList<PInfo> apps = getInstalledApps(false); /* false = no system packages */ 
final int max = apps.size(); 
for (int i=0; i<max; i++) { 
    apps.get(i).prettyPrint(); 
} 
} 

private ArrayList<PInfo> getInstalledApps(boolean getSysPackages) { 
ArrayList<PInfo> res = new ArrayList<PInfo>();   
List<PackageInfo> packs = getPackageManager().getInstalledPackages(0); 
for(int i=0;i<packs.size();i++) { 
    PackageInfo p = packs.get(i); 
    if ((!getSysPackages) && (p.versionName == null)) { 
     continue ; 
    } 
    PInfo newInfo = new PInfo(); 
    newInfo.appname = p.applicationInfo.loadLabel(getPackageManager()).toString(); 
    newInfo.pname = p.packageName; 
    newInfo.versionName = p.versionName; 
    newInfo.versionCode = p.versionCode; 
    newInfo.icon = p.applicationInfo.loadIcon(getPackageManager()); 
    res.add(newInfo); 
} 
return res; 
}} 
+0

你能更具体地说明什么不起作用吗?它是否强制关闭,它只是没有返回数据?无论如何,请发布logcat输出。 – 2011-03-24 22:59:06

回答

8

getPackageManager()是‘语境’类的方法,这样就可以从延伸‘语境’的任何对象调用它。类Activity扩展了上下文,并且您的主类扩展了Activity,因此您可以从主类对象调用getPackageManager()。如果您的班级没有延长ContextgetApps班的情况),您不能从中调用getPackageManager()。你需要首先获得你的活动环境。

编辑:

OK,您需要将您的活动传递给这个类:

在getApps类

中添加

private Context parent = null; 
public getApps(Context _parent) // a constructor that receives the context as parameter 
{ 
    parent = _parent; 
} 

public String getInfo() { // your implementation here... } 

,改变getPackageManager()...parent.getPackageManager()...

您主要活动,创建一个getApps的对象,然后调用它来获取信息:

getApps appsGetter = new getApps(this); // "this" is your activity actually,which extends Context 
String info = appsGetter.getinfo(); 

现在你仍然需要实现getInfo(),但它不应该这么难。还有一件事,Java中的类以大写字母开头,所以getApps考虑将它称为GetAppsAppsGetter

+0

你可以给你一些小小的代码示例以说明如何扩展上下文吗? – 2011-03-24 23:10:24

+0

@Niall,是的,但首先,你有一个主要活动在你的应用程序(你应该有...)? – MByD 2011-03-24 23:21:19

+0

以及我的主要类扩展活动..如果这就是你的意思? – 2011-03-24 23:28:04

相关问题