Android 开发 获取设备信息与App信息
设备信息
设备ID(DeviceId)
- 获取办法
android.telephony.TelephonyManager tm = (android.telephony.TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String deviceId = tm.getDeviceId();
- 当设备为手机时,返回设备的唯一ID。手机制式为 GSM 时,返回手机的 IMEI 。手机制式为 CDMA 时,返回手机的 MEID 或 ESN 。
- 非电话设备或者 Device ID 不可用时,返回 null .
- 属于比较稳定的设备标识符。
- 需要
READ_PHONE_STATE权限。 (Android 6.0 以上需要用户手动赋予该权限)。 - 某些设备上该方法存在 Bug ,返回的结果可能是一串0或者一串*号。
Sim 序列号(Sim Serial Number)
- 获取办法:
android.telephony.TelephonyManager tm = (android.telephony.TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String simSerialNum = tm.getSimSerialNumber();
- 不同 Sim 卡的序列号不同.
- Sim 卡序列号,当手机上装有 Sim 卡并且可用时,返回该值。手机未装 Sim 卡或者不可用时,返回
null. - 需要
READ_PHONE_STATE权限。 (Android 6.0 以上需要用户手动赋予该权限)
IMEI号
/**
* 获取IMEI
* @param context
* @return
*/
@SuppressLint("MissingPermission")
public static String getIMEI(Context context){
TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
return telephonyManager.getImei();
}
return "unkown";
}
Mac 地址(Mac Address)
- 获取办法:
android.net.wifi.WifiManager wifi = (android.net.wifi.WifiManager) context.getSystemService(Context.WIFI_SERVICE);
String macAddress = wifi.getConnectionInfo().getMacAddress();
- 没有 WiFi 硬件或者 WiFi 不可用的设备可能返回 null 或空,注意判空.
- 比较稳定的硬件标识符。
- 需要
ACCESS_WIFI_STATE权限。 - Android 6.0开始,谷歌为保护用户数据,用此方法获取到的 Wi-Fi mac 地址都为
02:00:00:00:00:00(更多信息查看此处) - 如果 app 在装有谷歌框架的设备中读取了mac地址,会被谷歌检测为有害应用提示用户卸载。这也是为什么像友盟、TalkingData 等数据统计 sdk 提供商专门针对 Google Play 提供特供版的 sdk.

设备序列号(Serial Number, SN)
- 获取办法:
String serialNum = android.os.Build.SERIAL;
- 比较稳定的设备硬件标识符,在上一篇文章中谷歌也未提到有啥缺点。
ANDROID_ID
- 获取办法:
String androidId = android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
- 在设备第一次启动的时候生成并保存,并且可能会在恢复出厂设置后重置该值。理论上是大部分是重置的。(API 中原话是:The value
maychange if a factory reset is performed on the device.) - 在 Android 2.2 中不可靠.
- 部分设备由于制造商错误实现,导致会返回相同的 Android_ID.
- 在 Android 4.2 及以上, 设备启用多用户功能后,每个用户的 Android_ID 不相同.
制造商 (Manufacturer)
- 获取办法:
String manufacturer = android.os.Build.MANUFACTURER;
型号(Model)
- 获取办法:
String model = android.os.Build.MODEL;
品牌(Brand)
- 获取办法:
String brand = android.os.Build.BRAND;
设备名 (Device)
- 获取办法:
String device = android.os.Build.DEVICE;
获取设备Android版本并判断
- 获取办法(判断当前版本是否大于等于19 API):
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {...}
获取设备系统版本号
/**
* 获取手机设备版本
* @return
*/
public static String getPhoneVersion(){
return Build.VERSION.RELEASE;
}
获取设备系统版本名称
android.os.Build.DISPLAY;
App信息
获取App版本号
int versionCode = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(),0).versionCode; //API 28之前的方法 long vresion = getPackageManager().getPackageInfo(getPackageName(), 0).getLongVersionCode(); // Android API 28 Platform 在API 28后新的方法
获取App版本号名称
String verName = context.getPackageManager().getPackageInfo(context.getPackageName(),0).versionName;
获取App名称
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(),0);
int labelRes = packageInfo.applicationInfo.labelRes;
String name = context.getResources().getString(labelRes);
获取app包名
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
String pkName = packageInfo.packageName;
获取未安装的APP图标、版本号、包名
获取app图标
public static Drawable getApkIcon(Context context, String apkPath) {
PackageManager pm = context.getPackageManager();
PackageInfo info = pm.getPackageArchiveInfo(apkPath,
PackageManager.GET_ACTIVITIES);
if (info != null) {
ApplicationInfo appInfo = info.applicationInfo;
appInfo.sourceDir = apkPath;
appInfo.publicSourceDir = apkPath;
try {
return appInfo.loadIcon(pm);
} catch (OutOfMemoryError e) {
Log.e("ApkIconLoader", e.toString());
}
}
return null;
}
获取app名称
String label = appInfo.loadLabel(mPackManager).toString();
获取app包名
String packageName = appInfo.packageName;
获取app VersionCode版本号
API 28之前
int appVersionCode = info.versionCode;
API 28之后
long appVersionCode = info.getLongVersionCode();
获取app VersionName版本名称
String appVersionName = info.versionName;
判断app是否安装
private boolean isApkInstalled(String packagename)
{
PackageManager localPackageManager = getPackageManager();
try
{
PackageInfo localPackageInfo = localPackageManager.getPackageInfo(packagename, PackageManager.GET_UNINSTALLED_PACKAGES);
return true;
}
catch (PackageManager.NameNotFoundException localNameNotFoundException)
{
return false;
} }
安装app
private void installAPK(String apkPath)
{
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.parse("file://" + apkPath),
"application/vnd.android.package-archive");
mContext.startActivity(intent);
}
Android 开发 获取设备信息与App信息的更多相关文章
- iOS获取设备型号和App版本号等信息(OC+Swift)
iOS获取设备型号和App版本号等信息(OC+Swift) 字数1687 阅读382 评论3 喜欢10 好久没有写过博客了,因为中间工作比较忙,然后有些个人事情所以耽误了.但是之前写的博客还一直有人来 ...
- 谷歌推出全新Android开发语言Sky:让App更流畅
土豆网同步更新:http://www.tudou.com/plcover/VHNh6ZopQ4E/ 使用HTML 创建Mac OS App 视频教程. 官方QQ群: (1)App实践出真知 434 ...
- 【视频】零基础学Android开发:蓝牙聊天室APP(二)
零基础学Android开发:蓝牙聊天室APP第二讲 2.1 课程内容应用场景 2.2 Android UI设计 2.3 组件布局:LinearLayout和RelativeLayout 2.4 Tex ...
- 【视频】零基础学Android开发:蓝牙聊天室APP(一)
零基础学Android开发:蓝牙聊天室APP第一讲 1. Android介绍与环境搭建:史上最高效Android入门学习 1.1 Google的大小战略 1.2 物联网与云计算 1.3 智能XX设备 ...
- android开发获取网络状态,wifi,wap,2g,3g.工具类(一)
android开发获取网络状态整理: package com.gzcivil.utils; import android.content.Context; import android.net.Con ...
- 【视频】零基础学Android开发:蓝牙聊天室APP(四)
零基础学Android开发:蓝牙聊天室APP第四讲 4.1 ListView控件的使用 4.2 BaseAdapter具体解释 4.3 ListView分布与滚动事件 4.4 ListView事件监听 ...
- Android开发怎么让自己的APP UI漂亮、大方(配色篇二)
我们在没有效果图的app开发中有一件事情肯定很头疼:一个按钮的调色改过来改过去,还是很难看,最终只能暂时作罢,浪费了大量的开发时间和精力.开发规范篇见Android开发怎么让自己的APP UI漂亮.大 ...
- Android开发怎么让自己的APP UI漂亮、大方(规范篇一)
首先,笔者是站立在开发者的角度来看UI设计的,欢迎专业人士提供指导,不多说,来看怎么把UI设计和开发高效结合起来~ 一.约定APP开发中的一些规则 1.大部分图标满足HDPI(高清)即可,比如:大众点 ...
- 【视频】零基础学Android开发:蓝牙聊天室APP(三)
零基础学Android开发:蓝牙聊天室APP第三讲 3.1 ImageView.ImageButton控件具体解释 3.2 GridView控件具体解释 3.3 SimpleAdapter适配器具体解 ...
随机推荐
- 基于webpack的react开发环境搭建新手教程
最近学习react-webpack项目搭建,找到一篇我认为不错的博客,跟着学习了一番,写得很详细很好,本篇博客纯属记录总结,要看更详细的搭建过程及解析,请戳: 基于webpack的React项目搭建( ...
- 你好git
在老师的推荐下,这次我第一次打开了github,作为一个菜鸟,对于这些功能还是有些新奇的,所以也摸索了很久. GIthub是一个基于git的社会代码分享社区,可以建立公开的,免费的分享代码,也可以关注 ...
- sdk(输入驱动物体 驱动属性 被驱动物体 被驱动属性 驱动数值 一键搞定驱动),当你的目标体很多展开会卡的时候使用这个
import maya.cmds as mc def sdksomething( sdk_obj="", sdkAttr=" ...
- H3C_IRF_LACP配置
IRF典型配置举例(LACP MAD检测方式)1. 组网需求 由于公司人员激增,接入层交换机提供的端口数目已经不能满足 PC 的接入需求.现需要在保护现有投资的基础上扩展端口接入数量,并要求网络易管理 ...
- 关于Mysql的主从
mysql 主从同步异常原因及恢复: 1,auto.cnf 配置问题 这个问题是在部署主从复制的时候,可能会遇到 [1]报错 Last_IO_Error: Fatal error: The sla ...
- node搭建简易的websocket服务
http协议单向请求,只能客户端向服务器发送消息,然而websocket一旦双方建立连接就可以双方通信,更加深层次的用法是websocket可以做基础,然后不同的客户端可以通过websocket连接可 ...
- Oracle开启监听缓慢问题
现象: Oracle数据库中,使用lsnrctl开启.关闭监听或查看监听状态时,非常慢,可以通过断网的方式使动作马上完成. 在客户端使用plsql等方式连接数据库时,也是非常慢,同样也可以通过切换网络 ...
- zabbix3.4使用外部邮件报警
打开web页面,找到 管理--报警媒介类型 打开 Email 填写外部邮箱信息 点击更新,这样发件人和邮箱服务器信息定义完成. 添加收件人信息: 接下来创建动作,配置---动作---选触发器 ok 过 ...
- Linux基础入门-文件打包与解压缩
文件打包与解压缩: Windows上常见的压缩文件后缀有*.zip(zip程序打包压缩), *.rar(rar程序压缩), *.7z(7zip程序压缩),在Linux上常见的还有*.gz(gzip程序 ...
- Getting Started with XlsxWriter
下面是一些关于使用XlsxWriter模块的简单介绍. 安装XlsxWriter 下面的是几个安装XlsxWriter模块的方法: 1.使用Pip 使用pip 方式是最推荐的从PyPi安装Python ...