2011-03-24 63 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

相關問題