如何从任何地方获取包名?
我知道Context.getApplicationContext()和View.getContext()的可用性,通过它我可以实际调用Context.getPackageName()来检索应用程序的包名称。
如果我从一个View
或Activity
对象可用的方法调用它们,它们会工作,但是如果我想从完全独立的类中找到没有View
或Activity
的包名,是否有办法做到这一点(直接或间接)?
一个想法是在你的主要活动中有一个静态变量,实例化为包名称。 然后只需引用该变量。
您将不得不在主活动的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