很多时候我们需要知道用户当前使用的是什么系统,甚至是系统的版本号(比如MIUI V7、V8)来进一步处理业务逻辑,比如打开系统权限设置界面。
感谢国内各大Android手机/系统生产商,让我们这些Android开发者每天都乐(伤)此(心)不(欲)疲(绝)的解决这些差异化问题。
通过读取 android.os.Build.MANUFACTURER 常量来获取设备的制造商从而确定设备所使用的系统。
常用 MANUFACTURER 常量对应关系
使用示例:
总结 :此方法通常有效,因为我们通常认为小米的手机使用MIUI系统,华为的手机使用EMUI系统等这种关联关系,那么就可能存在以下情况:
当然如果还想获取系统的版本号,可能这个方法就有点无力回天了。
因此我们可以通过在文件内容中查找一些特征标识从而确定系统类别。
在对 build.prop 进一步了解的过程中,找到了别人对这一部分的具体使用和讲解,这里就不再过多阐述。
别人的使用讲解
别人封装好的工具类
总结 :此方法通常更为有效(取决于特征标识的有效性),但比方法1略复杂一些。但是此方法可能存在一个致命的问题就是可能在某些设备上你无法读取 build.prop 文件,据网上资料显示(华为mate10 及后续的一些新设备无法读取此文件)。
对于以上两种方法,方式不同,也都存在各自的短板,因此在实际生产环境中最好是根据自己的需求而定,甚至是结合两者方法的特点来实现需求,到目前为止并没有找到其它更为行之有效能够适应所有情况的获取系统类型和版本的方法,如果有,谢天谢地请您告诉我,不胜感激。
附录:
小米开发文档- 如何识别小米设备/MIUI系统 ,关于开发文档中提到的读取属性,应该是使用 SystemUtil.java 实现
更多参考资料: https://blog.csdn.net/xx326664162/article/details/52438706
//获取版本名publicstatic String getAppVersionName(Context context) {
String versionName = ""
try {
// ---get the package info---
PackageManager pm = context.getPackageManager()
PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0)
versionName = pi.versionName
versioncode = pi.versionCode
if (versionName == null || versionName.length() <= 0) {
return""
}
} catch (Exception e) {
Log.e("VersionInfo", "Exception", e)
}
return versionName
}
2.--------------------------------------------------------------------------
获取当前应用的版本号:
private String getVersionName() throws Exception
{
// 获取packagemanager的实例
PackageManager packageManager = getPackageManager()
// getPackageName()是你当前类的包名,0代表是获取版本信息
PackageInfo packInfo = packageManager.getPackageInfo(getPackageName(),0)
String version = packInfo.versionName
return version
}
在检测应用程序是否需要升级时,首先应该获取其版本号与服务器端进行比较进行判断是否升级Android有两个版本号标识,分别为:versionCode,(整数值代表),versionName(字符串代表)
具体方法如下:
public static int getVerCode(Context context) {
int verCode = -1try {verCode = context.getPackageManager().getPackageInfo(
包名, 0).versionCode
} catch (NameNotFoundException e) {
Log.e(msg, e.getMessage())}return verCode}
public static String getVerName(Context context) {
String verName = try {verName = context.getPackageManager().getPackageInfo(
包名, 0).versionName
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)