我知道Context.getApplicationContext()和View.getContext()的可用性,通过它们我实际上可以调用Context.getPackageName()来检索应用程序的包名。
如果我从一个View或Activity对象可用的方法中调用,它们就可以工作,但是如果我想从一个完全独立的没有View或Activity的类中找到包名,有没有办法(直接或间接地)做到这一点?
我知道Context.getApplicationContext()和View.getContext()的可用性,通过它们我实际上可以调用Context.getPackageName()来检索应用程序的包名。
如果我从一个View或Activity对象可用的方法中调用,它们就可以工作,但是如果我想从一个完全独立的没有View或Activity的类中找到包名,有没有办法(直接或间接地)做到这一点?
当前回答
如果你使用gradle-android-plugin来构建你的应用程序,那么你可以使用
BuildConfig.APPLICATION_ID
从任何作用域(包括静态作用域)检索包名。
其他回答
BuildConfig。APPLICATION_ID和package可能并不总是相同的。使用“buildConfigField”让gradle添加包到BuildConfig并访问BuildConfig. package。 https://developer.android.com/studio/build/gradle-tips
defaultConfig {
applicationId "com.example.app.name"
minSdkVersion 24
targetSdkVersion 29
versionCode 1
versionName '0.1.0'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
buildConfigField("String", "PACKAGE", "\"com.example.app\"")
}
使用: BuildConfig。APPLICATION_ID获取包名的任何地方(即;服务、接收方、活动、片段等)
例子: String PackageName = BuildConfig.APPLICATION_ID;
一个想法是在你的主活动中有一个静态变量,实例化为包名。然后引用那个变量。
你必须在主活动的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访问它。
private String getApplicationName(Context context, String data, int flag) {
final PackageManager pckManager = context.getPackageManager();
ApplicationInfo applicationInformation;
try {
applicationInformation = pckManager.getApplicationInfo(data, flag);
} catch (PackageManager.NameNotFoundException e) {
applicationInformation = null;
}
final String applicationName = (String) (applicationInformation != null ? pckManager.getApplicationLabel(applicationInformation) : "(unknown)");
return applicationName;
}
PackageInfo pinfo = this.getPackageManager().getPackageInfo(getPackageName(), 0);
String sVersionCode = pinfo.versionCode; // 1
String sVersionName = pinfo.versionName; // 1.0
String sPackName = getPackageName(); // cz.okhelp.my_app
int nSdkVersion = Integer.parseInt(Build.VERSION.SDK);
int nSdkVers = Build.VERSION.SDK_INT;
希望它能起作用。