package com.mm.android.deviceaddmodule.mobilecommon.AppConsume;
|
|
import android.app.Application;
|
import android.content.Context;
|
import android.content.pm.ApplicationInfo;
|
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager.NameNotFoundException;
|
import android.net.wifi.WifiInfo;
|
import android.net.wifi.WifiManager;
|
import android.telephony.TelephonyManager;
|
import android.text.TextUtils;
|
|
import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil;
|
import com.mm.android.deviceaddmodule.mobilecommon.utils.PreferencesHelper;
|
|
import java.io.File;
|
|
/**
|
* 业务必要属性
|
*
|
* App配置文件必须要配置的 推送ID
|
* {@code meta_data4project} App配置文件必须要配置的 项目名称 {@code meta_data4Type}
|
* App配置文件必须要配置的 协议发起方
|
*/
|
public final class EnvironmentConfig {
|
public static final String meta_data4Type = "meta-data4type";
|
public static final String meta_data4AppId = "meta-data4appid";
|
public static final String meta_isHttps = "meta-ishttps";
|
|
/**
|
* 1.clientType:客户端类型(必填),"phone"-手机,"web"-浏览器,"box"-盒子。
|
* {@link } 环境配置属性。
|
*/
|
private String clientType;
|
|
/**
|
* 2.clientMac:客户端MAC地址(必填),用于唯一标识这个客户端。
|
*/
|
private String clientMac;
|
|
/**
|
* 服务端地址
|
*/
|
private String host;
|
|
/**
|
* 是否是走https协议
|
*/
|
private boolean isHttps;
|
|
/**
|
* 缓存文件名
|
*/
|
private String userAgent = "volley/0";
|
|
/**
|
* 缓存路径
|
*/
|
private File cacheDir;
|
|
/**
|
* 应用ID
|
*/
|
private String appId;
|
|
/**
|
* Application
|
*/
|
private Context application;
|
|
/**
|
* 版本名
|
*/
|
private String versionName;
|
|
private String language = null;
|
|
public static Context mContext;// applicationContext
|
|
public EnvironmentConfig(Builder b) {
|
this.clientMac = b.clientMac;
|
this.clientType = b.clientType;
|
userAgent = b.userAgent;
|
cacheDir = b.cacheDir;
|
appId = b.appId;
|
host = b.host;
|
this.isHttps = b.isHttps;
|
application = b.applicationContext;
|
versionName = b.versionName;
|
language = b.language;
|
}
|
|
public String getHost() {
|
return host;
|
}
|
|
public String getClientType() {
|
return clientType;
|
}
|
|
public void setHost(String host) {
|
this.host = host;
|
}
|
|
public String getClientMacAddress() {
|
return clientMac;
|
}
|
|
public Context getContext() {
|
return application;
|
}
|
|
public String getVersionName() {
|
return versionName;
|
}
|
|
public String getLanguage() {
|
return language;
|
}
|
|
public static class Builder {
|
private String clientType;
|
private String clientMac;
|
private String project;
|
private String userAgent;
|
private File cacheDir;
|
private String appId;
|
private String host;
|
private boolean isHttps;
|
private Context applicationContext;
|
private String versionName;
|
private String language = null;
|
|
public Builder setContext(Context context) throws Exception {
|
if (!(context instanceof Application)) {
|
throw new Exception("context must instance application");
|
}
|
applicationContext = context;
|
mContext = applicationContext.getApplicationContext();
|
return this;
|
}
|
|
public Builder setClientType(String clientType) {
|
this.clientType = clientType;
|
return this;
|
}
|
|
private void setVersionName(Context context) {
|
PackageManager pm = context.getPackageManager();
|
PackageInfo pi = null;
|
try {
|
pi = pm.getPackageInfo(context.getPackageName(), 0);
|
versionName = pi.versionName;
|
} catch (NameNotFoundException e) {
|
e.printStackTrace();
|
}
|
}
|
|
private void setClientMac(Context context) {
|
try {
|
// FIXME:Mac地址可能为空 IMEI 未识别信息,如果未发现,则功能不正常使用
|
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
|
String imei = telephonyManager.getDeviceId();
|
LogUtil.debugLog("lechange", "imei : " + imei);
|
if (imei == null) {
|
WifiManager wifiMgr = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
|
WifiInfo info = (null == wifiMgr ? null : wifiMgr.getConnectionInfo());
|
String mac = info != null ? info.getMacAddress() : "";
|
LogUtil.debugLog("lechange", "mac : " + mac);
|
if (mac != null) {
|
mac = mac.replace(":", "");
|
} else {
|
mac = "";
|
}
|
clientMac = mac;
|
} else {
|
clientMac = imei;
|
}
|
LogUtil.debugLog("lechange", "clientMac : " + clientMac);
|
} catch (Exception e) {
|
clientMac = "";
|
}
|
}
|
|
public Builder setProject(String project) {
|
this.project = project;
|
return this;
|
}
|
|
private void setCacheFile(Context context) {
|
cacheDir = context.getCacheDir();
|
userAgent = "volley/0";
|
try {
|
String packageName = context.getPackageName();
|
PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);
|
userAgent = packageName + "/" + info.versionCode;
|
} catch (NameNotFoundException e) {
|
|
}
|
}
|
|
public Builder setHost(String host) {
|
this.host = host;
|
String historyHost = PreferencesHelper.getInstance(applicationContext).getString(PreferencesConfig.HOST_HELP);
|
if (!TextUtils.isEmpty(historyHost)) {// 如果历史记录Host 不是nil
|
// 则设置历史Host,用于测试服务器
|
this.host = historyHost;
|
}
|
return this;
|
}
|
|
private void setDefaultHost(String host) {
|
this.host = host;
|
String historyHost = PreferencesHelper.getInstance(applicationContext).getString(PreferencesConfig.HOST_HELP);
|
if (!TextUtils.isEmpty(historyHost)) {// 如果历史记录Host 不是nil
|
// 则设置历史Host,用于测试服务器
|
this.host = historyHost;
|
}
|
}
|
|
public Builder setLanguage(String language) {
|
this.language = language;
|
return this;
|
}
|
|
private void setLanguage(Context context) {
|
this.language = context.getResources().getConfiguration().locale.getLanguage();
|
}
|
|
public EnvironmentConfig build() {
|
|
if (versionName == null || versionName.equals("")) {
|
setVersionName(applicationContext);
|
}
|
|
if (cacheDir == null) {
|
setCacheFile(applicationContext);
|
}
|
|
if (clientMac == null || clientMac.equals("")) {
|
setClientMac(applicationContext);
|
}
|
|
if (language == null || language.equals("")) {
|
setLanguage(applicationContext);
|
}
|
|
try {
|
ApplicationInfo appInfo = applicationContext.getPackageManager().getApplicationInfo(applicationContext.getPackageName(), PackageManager.GET_META_DATA);
|
|
if (clientType == null || clientType.equals("")) {
|
clientType = appInfo.metaData.getString(meta_data4Type);
|
}
|
|
isHttps = appInfo.metaData.getBoolean(meta_isHttps);
|
|
} catch (NameNotFoundException e) {
|
|
e.printStackTrace();
|
}
|
return new EnvironmentConfig(this);
|
}
|
}
|
}
|