如何调用Android活动中包含的方法?

Nor*_*ora 2 java android android-activity

我有一个Activity类,调用的方法getPacketNames()返回了一些已安装包的名称.

private ArrayList<CharSequence> getPackageNames(){
    ArrayList<CharSequence> packageNames = new ArrayList<>();
    List<PackageInfo> packagesInfos = getPackageManager().getInstalledPackages(0);

    for(PackageInfo packageInfo: packagesInfos){
        if(!isSystemApp(packageInfo)){
            packageNames.add(packageInfo.packageName);
        }
    }

    return packageNames;
}
Run Code Online (Sandbox Code Playgroud)

我希望其他人可以轻松地从另一个类调用此方法.但是,为了这样做,他们必须创建活动的实例.这看起来很麻烦,而且不正确.

你是否可以在Activity之外创建此方法?当我创建一个单独的类并复制粘贴该方法时,它不起作用,因为getPackageManager().getInstalledPackages(0)似乎需要在一个活动中.

Sag*_*gar 5

你不应该试图这样做.而是创建一个UtilityClass并使您的getPackageNames()静态方法.

public final class MyUtils {

    public static ArrayList<CharSequence> getPackageNames(final Context context){
        ArrayList<CharSequence> packageNames = new ArrayList<>();
        List<PackageInfo> packagesInfos = context.getPackageManager().getInstalledPackages(0);

        for(PackageInfo packageInfo: packagesInfos){
            if(!isSystemApp(packageInfo)){
                packageNames.add(packageInfo.packageName);
            }
        }

        return packageNames;
    }
    private static boolean isSystemApp(...){
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

然后从Activity中,您可以按如下方式访问它:

MyUtils.getPackageNames(this);