在我的Android应用程序中,我需要登录到远程服务器并发送有关该应用程序的信息(版本名称,版本代码)。 我知道我可以使用以下代码阅读此信息:
PackageInfo pinfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
String versionname = pinfo.versionName;
我也可以从gradle中读取此信息:“ BuildConfig.VERSION_NAME”。 问题是登录过程在网络模块中,我不想将上下文作为参数传递给每个网络调用。 生成的BuildConfig相对于模块版本而不是应用程序的版本。
答案 0 :(得分:0)
make方法以这种方式返回版本名称,然后将方法传递到称为“。”的网络中。
public String getVersionName(){
PackageInfo pinfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
String versionname = pinfo.versionName;
return versionname;
}
答案 1 :(得分:0)
可以在数据层中包含上下文。但是重复代码是不好的。因此,OkHttp中的机制称为拦截器。如果将其添加到配置OkHttp Client中,它将应用于每个网络呼叫。
class ApplicationInfoHeadersInterceptor(context: Context) : Interceptor {
private val appVersion = DeviceUtil.getAppVersionName(context)
private val osVersion = Build.VERSION.RELEASE
private val deviceId = DeviceUtil.getDeviceId(context)
private val applicationId = context.packageName
@Throws(IOException::class)
override fun intercept(chain: Interceptor.Chain): Response {
val builder = chain.request().newBuilder().apply {
header("APP-VERSION", appVersion)
header("OS-VERSION", osVersion)
header("OS", "android")
header("DEVICE-ID", deviceId)
}
return chain.proceed(builder.build())
}}