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
may
change 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适配器具体解 ...
随机推荐
- cocos creator 刚体卡顿问题(边界会卡住)
**问题描述:**在项目开发中,使用到了刚体, 在搭建地图过程中,发现两个相邻的砖块,即使贴合的再紧密,但星星人在上面走动的时候还是会有很大概率发生卡顿(被两个刚体的边界处卡住).为了解决这个问题,我 ...
- day08文件操作
今日内容 文件操作 内容详细 1.打开文件 1.open("作业讲解.py",mode="r",encoding="utf-8") 2.文件 ...
- java-递归练习
1.从键盘接收一个文件夹路径,统计该文件夹大小 public class Test1 { /** * @param args * 需求:1,从键盘接收一个文件夹路径,统计该文件夹大小 * * 从键盘接 ...
- 关于crontab
crontab是一个linux系统自带的定时执行任务的功能,有两种方法可以实现 1: 使用命令 crontab -e 然后直接编辑定时脚本,实际是编辑/var/spool/cron 目录下,一个和用户 ...
- Spring mvc后台重定向页面,实际前端不跳转
1.ajax不支持重定向 ajax是不支持重定向的,因为ajax本身就是局部刷新,不重新加载页面的. 2.若后台出现需要重定向页面,可以设置唯一错误码 前端ajax公共调用后,凡是遇到这一类错误码,则 ...
- PTA8
这个作业属于哪个课程 C语言程序设计2 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/ ...
- 【爬虫】如何用python+selenium网页爬虫
一.前提 爬虫网页(只是演示,切勿频繁请求):https://www.kaola.com/ 需要的知识:Python,selenium 库,PyQuery 参考网站:https://selenium- ...
- 尝试ipad编程 以失败告终
浏览器选择: safari,iOS内置浏览器,好用,不过有些限制 iPad上的 safari可以把网页保存为pdf,比iphone上的功能强大多了 qq浏览器用来下载文件,之后文件还可以复制到文件管理 ...
- linux系统如何发送邮件
安装应用yum install mailx sendmail -y接着修改/etc/mail.rc文件,添加一下参数#末尾添加 zabbix 发送告警信息邮箱(按照自己的情况修改)set from= ...
- ASP.NET MVC 枚举类型转LIST CONTROL控件
在实际应用中,我们经常会用到下拉框.多选.单选等类似的控件,我们可以统称他们为List Control,他们可以说都是一种类型的控件,相同之处都是由一个或一组键值对的形式的数据进行绑定渲染而成的. 这 ...