如何在没有模块上下文的情况下读取android应用信息?

时间:2018-07-10 08:03:54

标签: android android-context

在我的Android应用程序中,我需要登录到远程服务器并发送有关该应用程序的信息(版本名称,版本代码)。 我知道我可以使用以下代码阅读此信息:

PackageInfo pinfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
String versionname = pinfo.versionName;

我也可以从gradle中读取此信息:“ BuildConfig.VERSION_NAME”。 问题是登录过程在网络模块中,我不想将上下文作为参数传递给每个网络调用。 生成的BuildConfig相对于模块版本而不是应用程序的版本。

2 个答案:

答案 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())
}}