Android - 从Activity中获取清单文件中的元数据

3

我想要做类似这样的事情

private static final String url;
private static final String pass;
private static final String user;

static {
    Bundle metadata = ctx.getPackageManager().getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA).metaData;
    url = (String) metadata.get("JMSQueueURL");
    user = (String) metadata.get("JMSQueueUsername");
    pass = (String) metadata.get("JMSQueuePassword");
}

目前代码还在运行(但不是静态的),所以我可以获取包管理器,但现在我想将这段代码移动到另一个类中,该类不继承ContextWrapper(无法从中获取包管理器)。有什么办法吗?这个类类似于工具类。

2个回答

3
你可以把调用方法中的Context传递给Util类中的方法,并在那里使用它来获取你想要的详细信息。这样,你就可以从应用程序中的不同模块调用Util类中的方法,使用不同的上下文。
// Calling the Util method
Bundle metadata = Util.getMetaData(context);
...
// Inside the Util class
public static Bundle getMetaData(Context context) {
    return context.getPackageManager().getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA).metaData;
}

1
好主意,但那不是我想要的。我更喜欢将上下文注入到这个Util类中。 - mattis

0

这使我能够在应用程序的任何地方访问元数据,而无需上下文:

public class MyAndroidApp extends Application {

    private static MyAndroidApp instance;

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }

    public static MyAndroidApp getInstance() {
        return instance;
    }

    public static Bundle getMetadata() {
        try {
            return getInstance()
                    .getPackageManager()
                    .getApplicationInfo(getInstance().getPackageName(), PackageManager.GET_META_DATA)
                    .metaData;
        } catch (PackageManager.NameNotFoundException e) {
            return null;
        }
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接