2024年Android最新安卓手机相关工具类,很全很有用,2024年最新面试考点安排多久出来

Android开发除了flutter还有什么是必须掌握的吗?

相信大多数从事Android开发的朋友们越来越发现,找工作越来越难了,面试的要求越来越高了

除了基础扎实的java知识,数据结构算法,设计模式还要求会底层源码,NDK技术,性能调优,还有会些小程序和跨平台,比如说flutter,以思维脑图的方式展示在下图;

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

/**

  • 获取MCC、MNC

  • @param pContext

  • @param pMCCAndMNC new GetMCCAndMNC(){};

*/

public static void getMCCAndMNC(Context pContext,GetMCCAndMNC pMCCAndMNC) {

mGetMCCAndMNC = pMCCAndMNC;

String _networkOperator = ((TelephonyManager) pContext.getSystemService(Context.TELEPHONY_SERVICE)).getNetworkOperator();

if (TextUtils.isEmpty(_networkOperator)) {

mGetMCCAndMNC.onFailure();

}else {

if (_networkOperator.length() < 5) {

mGetMCCAndMNC.onFailure();

}else {

String _MCC =_networkOperator.substring(0, 3);

String _MNC = _networkOperator.substring(3);

if (!TextUtils.isEmpty(_MCC) && !TextUtils.isEmpty(_MNC)) {

mGetMCCAndMNC.onSuccess(_MCC, _MNC);

}else{

mGetMCCAndMNC.onFailure();

}

}

}

}

/**

  • 手机品牌

  • @return

*/

public static String getBrand() {

return android.os.Build.BRAND;

}

/**

  • 手机型号

  • @return

*/

public static String getMobileModel() {

return android.os.Build.MODEL;

}

/**

  • 手机号码

  • @return

*/

public static String getMobileNumber() {

return ((TelephonyManager) NewsApplication.sAppContext.getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number();

}

/**

  • SDK版本

  • @return

*/

public static int getSDKVersionNumber() {

return Build.VERSION.SDK_INT;

}

/**

  • 系统版本号

  • @return

*/

public static String getFrimWareVersionNumber() {

return Build.VERSION.RELEASE;

}

/**

  • 获取手机CPU核心数

  • @return

*/

public static int getNumCores()

{

// Private Class to display only CPU devices in the directory listing

class CpuFilter implements FileFilter

{

@Override

public boolean accept(File pathname)

{

// Check if filename is “cpu”, followed by a single digit number

if (Pattern.matches(“cpu[0-9]”, pathname.getName()))

{

return true;

}

return false;

}

}

try

{

// Get directory containing CPU info

File dir = new File(“/sys/devices/system/cpu/”);

// Filter to only list the devices we care about

File[] files = dir.listFiles(new CpuFilter());

// Return the number of cores (virtual CPU devices)

return files.length;

}

catch (Exception e)

{

e.printStackTrace();

// Default to return 1 core

return 1;

}

}

/**

  • 获得SDCard总大小

  • @return size (long)

*/

@SuppressWarnings(“deprecation”)

public static long getSDTotalSize() {

if (DeviceInfoUtils.hasSdcard()) {

File _FileExternalStorage = Environment.getExternalStorageDirectory();

StatFs _StatFs = new StatFs(_FileExternalStorage.getPath());

long _BlockSize, _TotalBlocks;

_BlockSize = _StatFs.getBlockSize();

_TotalBlocks = _StatFs.getBlockCount();

return _BlockSize * _TotalBlocks;

}else {

return 0;

}

}

/**

  • 获得SDCard剩余容量(可用大小 )

  • @return size (long)

*/

@SuppressWarnings(“deprecation”)

public static long getSDAvailableSize() {

if (DeviceInfoUtils.hasSdcard()) {

File _FileExternalStorage = Environment.getExternalStorageDirectory();

StatFs _StatFs = new StatFs(_FileExternalStorage.getPath());

long _BlockSize, _AvailableBlocks;

_BlockSize = _StatFs.getBlockSize();

_AvailableBlocks = _StatFs.getAvailableBlocks();

return _BlockSize * _AvailableBlocks;

}else {

return 0;

}

}

/**

  • 获得机身内存总大小

  • @return size (long)

*/

@SuppressWarnings(“deprecation”)

public long getRomTotalSize() {

File _FileDataDirectory = Environment.getDataDirectory();

StatFs _StatFs = new StatFs(_FileDataDirectory.getPath());

long _BlockSize, _TotalBlocks;

_BlockSize = _StatFs.getBlockSize();

_TotalBlocks = _StatFs.getBlockCount();

return _BlockSize * _TotalBlocks;

}

/**

  • 获得机身可用内存

  • @return size (long)

*/

@SuppressWarnings(“deprecation”)

public static long getRomAvailableSize() {

File _FileDataDirectory = Environment.getDataDirectory();

StatFs _StatFs = new StatFs(_FileDataDirectory.getPath());

long _BlockSize, _AvailableBlocks;

_BlockSize = _StatFs.getBlockSize();

_AvailableBlocks = _StatFs.getAvailableBlocks();

return _BlockSize * _AvailableBlocks;

}

/**

  • 获取手机MAC地址

  • @param pContext

  • @return

*/

public static String getMacAddress(Context pContext){

String result = “”;

WifiManager wifiManager = (WifiManager) pContext.getSystemService(Context.WIFI_SERVICE);

WifiInfo wifiInfo = wifiManager.getConnectionInfo();

result = wifiInfo.getMacAddress();

return result;

}

/**

  • Wifi状态

  • @param pContext

  • @return

*/

public static int getWifiStatus(Context pContext) {

return ((WifiManager) pContext.getSystemService(“wifi”)).getWifiState();

}

/**

  • Wifi 名称

  • @param pContext

  • @return

*/

public static String getWifiName(Context pContext) {

String str = “”;

WifiManager wifiManager = (WifiManager) pContext.getSystemService(Context.WIFI_SERVICE);

str = wifiManager.getConnectionInfo().getSSID();

return str;

}

/**

  • Wifi IP

  • @param pContext

  • @return

*/

public static String getHostIp(Context pContext) {

String str = “”;

try {

WifiManager wifiManager = (WifiManager) pContext.getSystemService(Context.WIFI_SERVICE);

int i;

if (wifiManager.isWifiEnabled()) {

i = wifiManager.getConnectionInfo().getIpAddress();

if (i != 0)

str = (i & 0xFF) + “.” + (0xFF & i >> 8) + “.”

  • (0xFF & i >> 16) + “.” + (0xFF & i >> 24);

} else {

i = getWifiStatus(pContext);

if ((i == 2) || (i == 3)) {

Enumeration<?> enumeration = NetworkInterface.getNetworkInterfaces();

while (enumeration.hasMoreElements()) {

Enumeration<?> enumerationTemp = ((NetworkInterface) enumeration

.nextElement()).getInetAddresses();

if (!enumerationTemp.hasMoreElements())

;

while (true) {

if (str.length() <= 0)

break;

InetAddress localInetAddress = (InetAddress) enumerationTemp

.nextElement();

if ((localInetAddress.isLoopbackAddress())

|| (!(localInetAddress instanceof Inet4Address)))

break;

str = localInetAddress.getHostAddress();

}

}

}

}

} catch (Exception localException) {

localException.printStackTrace();

}

return str;

}

/**

  • 外部存储是否挂载

  • @return true or false

*/

public static boolean isSDCardMounted() {

return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());

}

/**

  • 外部存储是否存在

  • @return true or false

总结

Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

上面分享的字节跳动公司2020年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

就先写到这,码字不易,写的很片面不好之处敬请指出,如果觉得有参考价值的朋友也可以关注一下我

①「Android面试真题解析大全」PDF完整高清版+②「Android面试知识体系」学习思维导图压缩包阅读下载,最后觉得有帮助、有需要的朋友可以点个赞

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

F(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

就先写到这,码字不易,写的很片面不好之处敬请指出,如果觉得有参考价值的朋友也可以关注一下我

①「Android面试真题解析大全」PDF完整高清版+②「Android面试知识体系」学习思维导图压缩包阅读下载,最后觉得有帮助、有需要的朋友可以点个赞

[外链图片转存中…(img-pFq6tNlH-1715675988621)]

[外链图片转存中…(img-IITT0ZnG-1715675988622)]

[外链图片转存中…(img-Am7QANv7-1715675988622)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值