import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.os.Build;
import android.telephony.TelephonyManager;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;
/**
* Created by dandy on 2016/7/13.
*
* 获取手机设备等的一些数据
*/
public class DeviceUtil {
/**
* 获取DisplayMetrics
* @param context
* @return
*/
private static DisplayMetrics obtain(Context context){
WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
return dm;
}
/**
* 获取屏幕宽度
* @param context
* @return
*/
public static int getDeviceWidth(Context context){
DisplayMetrics outMetrics = obtain(context);
return outMetrics.widthPixels;
}
/**
* 获取屏幕高度
* @param context
* @return
*/
public static int getDeviceHeight(Context context){
DisplayMetrics outMetrics = obtain(context);
return outMetrics.heightPixels;
}
/**
* 获取屏幕大小[0]宽,[1]高
* @param context
* @return
*/
public static int[] getDeviceSize(Context context){
DisplayMetrics outMetrics = obtain(context);
int [] sizes = new int[2];
sizes[0] = outMetrics.widthPixels;
sizes[1] = outMetrics.heightPixels;
return sizes;
}
/**
* 获取设备屏幕密度dpi,每寸所包含的像素点
* @param context
* @return
*/
public static float getDeviceDensityDpi(Context context){
return context.getResources().getDisplayMetrics().densityDpi;
}
/**
* 获取设备屏幕密度,像素的比例
* @param context
* @return
*/
public static float getDeviceDensity(Context context){
return context.getResources().getDisplayMetrics().density;
}
/**
* 获取状态栏高度
* @param context
* @return
*/
public static int getStatusHeight(Context context){
int statusHeight = -1;
try {
Class<?> clazz = Class.forName("com.android.internal.R$dimen");
Object object = clazz.newInstance();
int height = Integer.parseInt(clazz.getField("status_bar_height")
.get(object).toString());
statusHeight = context.getResources().getDimensionPixelSize(height);
} catch (Exception e) {
e.printStackTrace();
}
return statusHeight;
}
/**
* 截取当前屏幕画面为bitmap图片
* @param activity
* @param hasStatusBar 是否包含当前状态栏,true:包含
* @return
*/
public static Bitmap snapCurrentScreenShot(Activity activity,boolean hasStatusBar){
View decorView = activity.getWindow().getDecorView();
decorView.setDrawingCacheEnabled(true);
decorView.buildDrawingCache();
Bitmap bmp = decorView.getDrawingCache();
int deviceSize[] = getDeviceSize(activity);
int coordinateY = 0;
int cutHeight = deviceSize[1];
if(!hasStatusBar){
Rect frame = new Rect();
decorView.getWindowVisibleDisplayFrame(frame);
coordinateY += frame.top;
cutHeight -= frame.top;
}
Bitmap shot = Bitmap.createBitmap(bmp,0,coordinateY,deviceSize[0],cutHeight);
decorView.destroyDrawingCache();
return shot;
}
/**
* 获取手机IMEI号
* add <uses-permission android:name="android.permission.READ_PHONE_STATE" /> in AndroidManifest.xml
* @param context
* @return
*/
public static String getDeviceIMEI(Context context){
TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getDeviceId();
}
/**
* 获取手机厂商
* @return
*/
public static String getDeviceManufacturer(){
return Build.MANUFACTURER;
}
/**
* 获取手机型号
* @return
*/
public static String getDeviceModel(){
return Build.MODEL;
}
/**
* 获取手机系统版本号
* @return
*/
public static String getDeviceSystemVersion(){
return Build.VERSION.RELEASE;
}
/**
* 讲px值转变成dip
* @param context
* @param px
* @return
*/
public static float pxToDip(Context context,float px){
return px / getDeviceDensity(context) + 0.5f;
}
/**
* 将dip值转成px
* @param context
* @param dip
* @return
*/
public static float dipToPx(Context context,float dip){
return dip * getDeviceDensity(context) + 0.5f;
}
/**
* 将px值转成sp值
* @param context
* @param px
* @return
*/
public static float pxToSp(Context context,float px){
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return px / fontScale + 0.5f;
}
/**
* 将sp值转成px值
* @param context
* @param sp
* @return
*/
public static float spTpPx(Context context,float sp){
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return sp * fontScale + 0.5f;
}
}
测试代码结果如下:
07-14 14:43:17.062 10053-10053/? D/MainActivity: testDeviceUtil: width = 1080
07-14 14:43:17.064 10053-10053/? D/MainActivity: testDeviceUtil: height = 1776
07-14 14:43:17.065 10053-10053/? D/MainActivity: testDeviceUtil: statusHeight = 75
07-14 14:43:17.065 10053-10053/? D/MainActivity: testDeviceUtil: model = Nexus 5
07-14 14:43:17.065 10053-10053/? D/MainActivity: testDeviceUtil: factory = LGE
07-14 14:43:17.065 10053-10053/? D/MainActivity: testDeviceUtil: densityDpi = 480.0
07-14 14:43:17.065 10053-10053/? D/MainActivity: testDeviceUtil: density = 3.0
07-14 14:43:17.065 10053-10053/? D/MainActivity: testDeviceUtil: version = 5.0.1
07-14 14:43:17.067 10053-10053/? D/MainActivity: testDeviceUtil: imei = 352584060187280原文地址http://blog.youkuaiyun.com/tabolt/article/details/51909247
相关推荐
无人机精准降落辅助系统核心技术解析
接近地面时(<10米)切换至基于图像的视觉伺服(IBVS),依据图像特征点偏移(如靶标图案、LED标记)微调姿态,消除位置累积误差。通过SRUKF(平方根无迹卡尔曼滤波) 算法融合三类数据,输出6自由度位姿估计(精度达厘米级),抑制单一传感器噪声。权值根据信噪比动态调整。模型预测控制(MPC):针对斜坡降落,构建包含平台倾角、风扰的动力学方程,滚动求解最优油门序列。动态照明适配:针对夜间或低光照场景,系统向降落平台发送亮度调节指令,如增强红外信标强度或调整可见光LED阵列,确保特征识别鲁棒性。
获取真实的density 密度因子
double getdensity(Activity activity) { Point point = new Point(); //这样获取的宽高准确,不是heightPixels if (Build.VERSION.SDK_INT > 16) { activity.getWindowManager().getDefaul
STM32L452与FPGA通信翻车?手把手教你关闭I2C时钟延展避坑(附OVR错误解决方案)
本文深入解析STM32L452与FPGA在I2C通信中因时钟延展功能导致的常见问题,提供关闭I2C时钟延展的详细配置方法(NOSTRETCH模式),并针对可能出现的OVR错误给出Combined模式解决方案。通过实战案例和波形分析,帮助工程师快速排查和解决嵌入式系统中的I2C兼容性问题。
Android源码阅读笔记:DisplayMetrics类
Android源码阅读:DisplayMetrics类概述常量成员变量方法 概述 DisplayMetrics类主要是用来描述设备显示的一些信息,像是设备大小、密度以及字体的缩放。 常量 设备设置密度Density的相关数值 public static final int DENSITY_LOW = 120; public static final int DENSITY_140 = 140; public static final int DENSITY_MEDIUM = 160;
别只会‘pip install’了!当Python报错找不到‘pkg_resources’时,你的setuptools可能出大问题
本文深入解析Python开发中常见的`ModuleNotFoundError: No module named 'pkg_resources'`错误,揭示其背后的setuptools依赖问题。通过系统化的诊断与修复指南,帮助开发者理解Python包管理机制,并提供从基础到高级的解决方案,确保pip和setuptools的正常运行。
退火朗之万动力学采样
退火朗之万动力学采样(Simulated Annealing Langevin Dynamics Sampling)结合了退火技术和朗之万动力学,是一种用于分子模拟和统计物理中的计算方法。这种方法可以帮助系统从局部最小值中逃逸,以找到全局最小值或进行有效的配置空间探索。
Android中的lcd_density && 在应用源码中设置横竖屏和取消横竖屏 && layout文件10dip的意义
一款LCD屏幕,它的density密度是有其工艺决定好的,但是在软件中我们可以进行修正以满足要求。对于HVGA屏,设置ro.sf.lcd_density=160,对于WVGA屏,设置ro.sf.lcd_density=240。来到相关的源码部分,Density获取的部分在DisplayMetrics.java(frameworks\base\core\java\android\util)这个类里面
Agent Skills:AI智能体规模化落地的基础设施
摘要:AgentSkills体系已成为AI智能体落地的核心基础设施,解决了能力扩展和行业知识沉淀两大核心难题。该开放标准通过语义优先、渐进式披露等设计原则,实现了工具调用的标准化和可控化,同时支持轻量化知识沉淀。Skill作为最小能力单元,将传统软件功能、行业知识等封装为可被智能体调用的标准化模块,推动了软件产业从"工具时代"向"智能体时代"的范式变革。目前该体系已被主流Agent工具广泛兼容,形成完整生态,未来将持续演进,进一步降低落地门槛,推动AI原生转型。
Android - 获取设备信息的工具类( DeviceUtil)
注解: 封装了安装常用的设备信息查询的工具类: 设备宽度、设备高度、SD卡判断、是否有网、版本名称、版本号、唯一标识、手机品牌、手机型号、API等级、Android版本、App进程Id、App进程Name、Meta-Data值、内网ip、公网ip(请求淘宝接口); 代码: package com.xxx.util; import android.Manifest; import and...
笔试题-2023-思特威-数字电路设计(CIS)【纯净题目版】
10 笔试题-2023-思特威-数字电路设计(CIS)【纯净题目版】
DSP开发环境及工具之CCS
CCS( Code Composer Studio)是美国德州仪器(TI)公司的嵌入式处理器的开发环境,可以用于TI公司的各个系列处理器的软件开发和调试,如DSP,MCU,ARM等。CMD的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件。从其名称可以看出,该文件的作用是指明如何链接程序的。编辑完C语言设置,添加cmd文件之后,然后检查编译配置选项。主要的操作都是在这个窗口之间做相应的切换。
Android--史上最全、最完整,获取设备信息、获取手机唯一标识
史上最详细、最完整、获取Android设备详细信息。
【异常】OpenClaw LLM Request Timeout 超时问题的快速定位与落地解决
摘要:OpenClaw系统在执行任务时频繁出现"LLM request timed out"异常。通过分析发现主模型自动调度导致响应延迟,且缺乏超时配置兜底。解决方案包括:1)将主模型切换为低延迟的豆包2.0 Lite;2)保留豆包2.0 Pro和Kimi作为备用;3)重启Gateway服务验证。优化后系统响应速度显著提升,未再出现超时异常。后续建议增加显式超时配置、优化任务拆分和Prompt指令,并建立网络监控机制。(148字)
Android提高效率的工具类
每次公司新开一个项目的时候,当用到什么基础工具类的时候,我们获取会去自己写,很多时候都是想着网上不是有现成的吗,为何还要再造轮子呢!这个时候你开始Google,百度,殊不知这又浪费了一些时间。今天我就把我们Android开发中会常用到的工具类做个总结,并上传到GitHub中,以后工作中再用到的话,就直接去自己仓库中找就行了,提高了工作效率。 目前该工具类中涵盖以下工具类 Applicati
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
Android开发常用工具类
1.DeviceUtil:获取设备信息类import android.content.Context; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Build;import java.io.IOException; import java.io.InputStream
RU DOS版、EFI版32bit/64bit BIOS常用工具
DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。
Android 游客登录根据机型判断不同用户
用户游客登录是根据获取手机设备码,并进行MD5加密后将字符串传入后台从而判断不同机型的用户,但是同一款手机的设备码相同从而造成同一型号的手机用户登录后是同一个ID 解决方案:使用设备码去区分 public class DeviceCodeUtils { public static String getUniqueDeviceId(boolean isReadCache) { String sbhcm = CacheUtil.readString(CacheUtil.getDev.
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
AndroidUtils 工具类
使用这些工具类的时候,或许会涉及到一些相关权限<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission andr...
AndroidUtils一个能让你提高效率的工具类
每次公司新开一个项目的时候,当用到什么基础工具类的时候,我们获取会去自己写,很多时候都是想着网上不是有现成的吗,为何还要再造轮子呢!这个时候你开始Google,百度,殊不知这又浪费了一些时间。今天我就把我们Android开发中会常用到的工具类做个总结,并上传到GitHub中,以后工作中再用到的话,就直接去自己仓库中找就行了,提高了工作效率。目前该工具类中涵盖以下工具类Application ...
手机一些信息的获取(电池相关、versionName、屏幕相关等)
【代码】手机一些信息的获取(电池容量、电量、versionName)
day06
今天又复习一遍多表联查,jdk安装及配置环境变量、sdk安装及配置环境变量、常用adb命令、mokey命令、查看手机日志 日志级别,今天学习新的东西,每天都能这么开心学东西好幸福,我要努力学习,争取早日高薪! ...
Android 手机信息获取详解
极力推荐文章:欢迎收藏 Android 干货分享 Android手机是我们常用的工具之一,买手机之前,手机厂商会提供一些手机参数给我们,那么问题来了,我们该如何获取手机上的参数信息呢? 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 一、 获取手机基本信息(厂商、型号等参数) 二、设备信息获取实现图 三、 获取手机设备 宽、高、IMEI...
Android 自动化测试工具
Android 自动化测试工具 UiAutomator 工具 UiAutomator 2.0 优点 获取应用 Context ,可以使用 Android 服务和接口 基于 Junit4,无须继承于任何父类,方法名不限,支持使用注解 Annotation 测试执行可使用 Instrumentation 命令方式及 gradle 方式 API 优化,新增 UiObject2、Until、B...
android手机获取手机设备信息
在有的项目中需要根据特定的手机信息来进行处理,这时就需要我们来获取手机的设备信息了,那首先看看我的测试机的一些基本信息:那么这些信息怎么获得呢??其实都封装在了TelephonyManager中,我们从里面可以拿到,但是注意的是有的手机手机号是拿不到的(例如我的nexus 5X)好了,代码如下:封装好的PhoneInfo 类package com.ddv.www.shadowphone.utils;
Andoroid 11 开机广播处理超时导致第三方应用启动延迟
RK3566 + Android 11, 在测试过程中, 发现第三方应用的开机自启时间加长了, 在显示Launcher后, 还需要等待超过1分钟的时间. 后续在查LOG中发现以以下异常LOG(Timeout of broadcast BroadcastRecord): started 60000ms ago 表明是开始于1分钟前的广播处理超时, 这时候广播会继续下发, 这时候第三方应用才开始接收到开机广播并执行相应的操作, 比如自启.
记一次更改为了适配盒子,修改了盒子系统density值的过程
1. 背景 因为项目需要,需要把我在一个A盒子上写的Launcher App,移植到B盒子上,唯一的要求就是快。 A盒子和B盒子都是1080PUI. 2. 遇到问题And找解决方法 我简单挪过去了后发现,屏幕显示不对,经过我自己分析,发现,A盒子上1dp=2px,而B盒子上1dp=1.5px, 我们做Android的都知道,densityDpi/160就是dp和px的比例,也就是dens...
1696



被折叠的 条评论
为什么被折叠?



