Я получил этот код из Интернета, я полагаю, чтобы получить список всех приложений на телефоне, и, судя по комментариям на веб-странице, он работает, но я просто не могу заставить его работать для меня вообще. это похоже на getPacketManager(), который дает мне проблему. может кто-то, пожалуйста, посмотрите на код и объясните мне, что я должен сделать, чтобы заставить его работать?
это мой полный класс... я не могу заставить его работать даже в трех местах, где есть "getPackageManager()", он дает мне ошибку слева от экрана, говоря "Метод getPackageManager ( ) undefined для типа 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;
}}
getPackageManager()
- это метод класса Context, поэтому вы можете вызвать его из любого объекта, который расширяет "Контекст". Класс Activity
расширяет контекст, и ваш основной класс расширяет Activity
, поэтому вы можете вызвать getPackageManager()
из вашего основного объекта класса. Если ваш класс не расширяет Context
(это случай класса getApps
), вы не можете вызвать getPackageManager()
из него. Сначала вам нужно получить контекст своей деятельности.
EDIT:
ОК, вам необходимо передать свою активность в этот класс:
в классе 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
следует назвать ее getApps
или AppsGetter
.