我知道Context.getApplicationContext()和View.getContext()的可用性,通过它们我实际上可以调用Context.getPackageName()来检索应用程序的包名。
如果我从一个View或Activity对象可用的方法中调用,它们就可以工作,但是如果我想从一个完全独立的没有View或Activity的类中找到包名,有没有办法(直接或间接地)做到这一点?
我知道Context.getApplicationContext()和View.getContext()的可用性,通过它们我实际上可以调用Context.getPackageName()来检索应用程序的包名。
如果我从一个View或Activity对象可用的方法中调用,它们就可以工作,但是如果我想从一个完全独立的没有View或Activity的类中找到包名,有没有办法(直接或间接地)做到这一点?
当前回答
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;
希望它能起作用。
其他回答
如果你使用gradle-android-plugin来构建你的应用程序,那么你可以使用
BuildConfig.APPLICATION_ID
从任何作用域(包括静态作用域)检索包名。
如果你使用gradle build,使用这个:BuildConfig。APPLICATION_ID获取应用程序的包名。
对于那些正在使用Gradle的人,就像@Billda提到的,你可以通过以下途径获取包名:
BuildConfig.APPLICATION_ID
这给了你在你的应用程序gradle中声明的包名:
android {
defaultConfig {
applicationId "com.domain.www"
}
}
如果您有兴趣获得java类使用的包名(有时与applicationId不同),您可以使用
BuildConfig.class.getPackage().toString()
如果你不知道该用哪一个,请阅读这里:
注意:应用程序ID过去是直接绑定到代码的 包名称;所以一些Android api使用术语“包名” 方法名和参数名,但这实际上是你的 应用程序ID。例如,Context.getPackageName()方法 返回你的应用ID。没有必要分享你的代码 应用程序代码外的真实包名。
只需使用这段代码
val packageName = context.packageName
这适用于我在kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var packageName=applicationContext.packageName // need to put this line
Log.d("YourTag",packageName)
}