如何从任何地方获取包名?

我知道Context.getApplicationContext()和View.getContext()的可用性,通过它我可以实际调用Context.getPackageName()来检索应用程序的包名称。

如果我从一个ViewActivity对象可用的方法调用它们,它们会工作,但是如果我想从完全独立的类中找到没有ViewActivity的包名,是否有办法做到这一点(直接或间接)?


一个想法是在你的主要活动中有一个静态变量,实例化为包名称。 然后只需引用该变量。

您将不得不在主活动的onCreate()方法中初始化它:

全球对班级:

public static String PACKAGE_NAME;

然后..

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    PACKAGE_NAME = getApplicationContext().getPackageName();
}

然后您可以通过Main.PACKAGE_NAME访问它。


如果您使用gradle-android-plugin构建您的应用程序,那么您可以使用

BuildConfig.APPLICATION_ID

从任何范围检索包名称,包括。 一个静态的。


如果你的意思是没有明确的Context (例如来自后台线程),那么你应该在你的项目中定义一个类,如:

public class MyApp extends Application {
    private static MyApp instance;

    public static MyApp getInstance() {
        return instance;
    }

    public static Context getContext(){
        return instance;
        // or return instance.getApplicationContext();
    }

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

然后在manifest您需要将此类添加到“ Application选项卡上的“ Name字段。 或编辑XML并放

<application
    android:name="com.example.app.MyApp"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    .......
    <activity
        ......

然后从任何地方打电话

String packagename= MyApp.getContext().getPackageName();

希望能帮助到你。

链接地址: http://www.djcxy.com/p/71149.html

上一篇: How to get package name from anywhere?

下一篇: html5 audio player on autoplay is not working