android开发
柴华松
谁若用真心对我,我便拿命去珍惜
展开
-
Handler标准用法(推荐)
Handler经常会出现泄露问题,原因是handler持有了activity的引用后导致activity无法被回收,如下是推荐使用的标准用法原创 2021-12-10 11:21:20 · 2491 阅读 · 0 评论 -
Android 获取Wifi列表详解(包含动态权限申请)
WLAN 扫描流程扫描流程分为三步:为 SCAN_RESULTS_AVAILABLE_ACTION 注册一个广播监听器,系统会在完成扫描请求时调用此监听器,提供其成功/失败状态。对于搭载 Android 10(API 级别 29)及更高版本的设备,系统将针对平台或其他应用在设备上执行的所有完整 WLAN 扫描发送此广播。应用可以使用广播被动监听设备上所有扫描的完成情况,无需发出自己的扫描。使用 WifiManager.startScan() 请求扫描。请务必检查方法的返回状态,因为调用可能因以下任一原创 2021-09-14 10:20:13 · 5016 阅读 · 1 评论 -
Android判断当前是usb充电还是AC充电器充电
众所周知,Android充电模式有两种,一种是插入usb充电,也即连接电脑充电,一种是插入充电器充电,也即(AC充电)这两种模式区别是前者可以被调试或者做一些文件的操作,后者只是单纯的充电。判断这两种模式的方法也很简单,使用如下函数即可: public boolean acCharge(Context context) { try { Intent batteryBroadcast = context.registerReceiver(null, new IntentFilter原创 2021-09-14 09:53:38 · 1846 阅读 · 0 评论 -
Android保存ArrayList对象到文件
在业务开发中经常会遇到需要保存对象到文件的需求,如下函数是保存ArrayList<HashMap<String, String>>对象到磁盘,并从磁盘读取还原ArrayList<HashMap<String, String>>对象的方法: /** * 保存加密后的数据到本地磁盘 * @param context 上下文 * @param data 需要保存的ArrayList<HashMap<String, String>&g原创 2021-05-26 11:36:10 · 875 阅读 · 0 评论 -
resource failed to call close
在运行Android项目时,日志中会出现A resource failed to call close告警信息:2021-05-26 11:26:52.564 11386-11401/com.xxx.example W/System: A resource failed to call close. 这是由于文件输入和输出流在调用后没有及时close导致的,需要在调用后手动close掉输入输出流try { FileInputStream fis = new FileInputStream(pa原创 2021-05-26 11:31:52 · 38688 阅读 · 1 评论 -
android studio groovy gradle 文件遍历方法
import groovy.io.FileType def path = gradle.getGradleUserHomeDir().getAbsolutePath() + "/caches/modules-2/files-2.1/" println "path:" + path def jarList = [] new File(path).eachFileRecurse(FileType.FILES) { file -> if (file.getName原创 2021-03-29 14:03:39 · 837 阅读 · 0 评论 -
Android刘海屏适配官方指导文档
支持刘海屏刘海屏是指某些设备显示屏上的一个区域延伸到显示面,这样既能为用户提供全面屏体验,又能为设备正面的重要传感器留出空间。Android 在搭载 Android 9(API 级别 28)及更高版本的设备上正式支持刘海屏。请注意,设备制造商也可以选择在搭载 Android 8.1 或更低版本的设备上支持刘海屏。本主题介绍如何实现对带刘海屏的设备的支持,包括如何处理“刘海区域”,即显示面上包含刘海的无边框矩形。在带刘海屏的设备上有什么要求为了确保一致性和应用兼容性,搭载 Android 9 的设备原创 2020-12-15 13:35:47 · 369 阅读 · 2 评论 -
Android内存管理机制官方详解文档
很早之前写过一篇《Android内存管理机制详解》点击量已7万+,现把Google官方文档整理输出一下,供各位参考。一、内存管理概览Android 运行时 (ART) 和 Dalvik 虚拟机使用分页和内存映射来管理内存。这意味着应用修改的任何内存,无论修改的方式是分配新对象还是轻触内存映射的页面,都会一直驻留在 RAM 中,并且无法换出。要从应用中释放内存,只能释放应用保留的对象引用,使内存可供垃圾回收器回收。这种情况有一个例外:对于任何未经修改的内存映射文件(如代码),如果系统想要在其他位置使用其内原创 2020-12-14 16:29:40 · 6231 阅读 · 9 评论 -
Android高效代码官方优化指南
本文主要介绍了各种微优化,如果将其配合使用,能够提高应用的整体性能;但是,这些更改不太可能对性能产生显著影响。选择正确的算法和数据结构应始终是您的首要任务,但此内容不在本文档的讨论范围内。您应该将本文档中的提示作为编码时的一般做法并养成习惯,从而提高综合代码效率。编写高效代码有两个基本规则:不需要做的工作就不要做。如果可以避免,就不要分配内存。在微优化 Android 应用时,您会遇到的最棘手的问题之一是应用肯定会在多种类型的硬件上运行。不同版本的虚拟机会在不同的处理器上以不同的速度运行。通常并原创 2020-12-14 13:36:22 · 338 阅读 · 0 评论 -
Simpleperf工具使用介绍
Simpleperf下载下载Android ndk-bundle ,在simpleperf/bin/android目录下包含有不同体系架构的 Android 上运行的静态二进制文件,在arm目录下打开命令窗口,执行命令:adb push simpleperf data/data/adb shellcd data/data/chmod 777 simpleperf./simpleperf stat -p xxx(pid 或tid) --duration xxx(时间)Simpleperf的工原创 2020-12-02 11:24:50 · 4480 阅读 · 0 评论 -
Android中内存泄漏之匿名内部类
Android或者Java开发中内存泄漏情况众多,其中较容易出现且经常被人忽略的内存泄漏要数匿名内部类的泄漏了,参考泄漏的代码如下(摘自Android原生SystemUI模块):frameworks/base/packages/SystemUI/src/com/android/systemui/volume/ConfigurableTexts.javaprivate final ArrayMap<TextView, Integer> mTexts = new ArrayMap<>原创 2020-12-02 11:06:22 · 872 阅读 · 2 评论 -
Selinux 错误解决合辑(持续更新~)
Access denied finding property “hwservicemanager.ready”Log中报如下错误:E libc : Access denied finding property “hwservicemanager.ready”则需要加入如下权限:allow xxx hwservicemanager_prop:file { read open getattr map};Access denied finding property “persist.vendor.原创 2020-11-20 19:58:28 · 2475 阅读 · 1 评论 -
Android systrace/atrace/ftrace抓取方法
android 中的trace分为三种:systrace、atrace和ftrace,本文主要介绍systrace/atrace/ftrace抓取的详细命令和方法,直接使用命令即可抓取,可以轻松上手各种trace的抓取。原创 2020-11-18 13:38:16 · 7829 阅读 · 0 评论 -
Dagger2使用详解
目的本文主要探讨Dagger2的技术实现原理及使用方法,可以让读者快速上手Dagger2。Dagger2介绍2.1 Dagger2是什么?Dagger2在Github主页上的自我介绍是:“A fast dependency injector for Android and Java“(一个提供给Android和Java使用的快速依赖注射器。)Dagger2是由谷歌接手开发,最早的版本Dagger1 是由Square公司开发的。2.2 Dagger2相较于Dagger1的优势是什么?更好的性.原创 2020-10-29 20:14:35 · 2227 阅读 · 1 评论 -
Android.bp文件中加入第三方JAR包或者so文件的方法
预制jar包在项目的根目录新建 libs文件夹,放入要导入的jar包比如 testlib.jar新增Android.bp文件在新增的libs文件夹下加入Android.bp文件,新增如下内容java_import { name: "testlib_jar", jars: ["libs/testlib.jar"],}修改模块中的Android.bp需要在android...原创 2019-11-14 15:04:25 · 14386 阅读 · 1 评论 -
java.lang.NoSuchMethodError: no static or non-static method 解决方法
最近在调试JNI的时候报了一个莫名其妙的错误,同一种类型的函数可以注册成功,不同类型的就会抛出一项异常:05-14 16:18:40.180 1445 1445 E AndroidRuntime: java.lang.NoSuchMethodError: no static or non-static method "Lcom/sprd/validationtools/phasecheck原创 2015-05-14 16:52:34 · 47318 阅读 · 11 评论 -
Android 获取ROOT权限原理解析
一、 概述本文介绍了android中获取root权限的方法以及原理,让大家对android玩家中常说的“越狱”有一个更深层次的认识。 二、 Root的介绍1. Root 的目的可以让我们拥有掌控手机系统的权限,比如删除一些system/app下面的无用软件,更换开关机铃声和动画,拦截状态栏弹出的广告等。2. Root的原理介绍谷歌的a原创 2013-01-04 09:30:08 · 64894 阅读 · 19 评论 -
android Monkey test测试
下面介绍一种Monkey测试方法:单一模块Monkey测试以下这条Monkey指令为例:monkey -s 12 --throttle 450 -p com.android.cameraswitch --kill-process-after-error --ignore-timeouts --ignore-security-exceptions -v 10000 这条原创 2011-12-20 14:21:42 · 12189 阅读 · 0 评论 -
android获取文件getMimeType的两种方法
方法1:import java.util.Locale;private static String getSuffix(File file) { if (file == null || !file.exists() || file.isDirectory()) { return null; }原创 2015-04-02 15:30:56 · 11784 阅读 · 0 评论 -
AsyncTask的使用方法
1.导入类:import android.os.AsyncTask;2.如下方法:private TestAsyncTask mTestAsyncTask;private void testAsync() { if (mTestAsyncTask != null && mTestAsyncTask.getStatus() != AsyncTask.Status.FINISHE原创 2015-05-20 14:45:58 · 1104 阅读 · 0 评论 -
ContentProvider实例
这篇文章记录使用ContentProvider的方法,提供了最简单安全的移植方法首先在工程目录建立包名对应的database目录放入如下三个文件:DBHelper.java:package com.sprd.fileexplorer.database;import android.content.Context;import android.database.sqli原创 2015-05-27 17:25:01 · 1133 阅读 · 0 评论 -
Android adt-bundle android-studio sdk adt 下载地址
备份一下,好用。最近 Google 被墙了, 上传一下自己收集的 Android 开发环境, 下面给出的官网链接也可以下载;1. 百度网盘下载地址Android集成环境 NDK JDK 总链接 : http://pan.baidu.com/s/1bnjaDKb;Android Studio Linux版 : http://pan.baidu.com/s/1eQjA6MA原创 2014-12-30 10:37:22 · 5758 阅读 · 1 评论 -
Android获取手机状态和监听手机来电状态
获取手机状态: import android.content.Context; import android.telephony.TelephonyManager; //获得相应的系统服务 TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); /**原创 2015-01-28 15:09:57 · 25356 阅读 · 2 评论 -
android清除数据后widget无法更新问题修改
清除数据时会发送ACTION_PACKAGE_DATA_CLEARED广播,在widgetProvider里面监听该广播并进行处理就可以了 public static class PackageDataClearedReceiver extends BroadcastReceiver { private static final String ACTION_PACK原创 2014-11-21 17:24:00 · 4549 阅读 · 1 评论 -
Android使用adb获得activity堆栈信息
非常有用的命令:adb shell dumpsys activity该命令可以看到当前运行的是哪个activity,运行的一些进程等首先可以看到运行的进程:ACTIVITY MANAGER RUNNING PROCESSES (dumpsys activity processes) Process LRU list (sorted by oom_adj, 43 total,原创 2014-10-20 15:32:32 · 21502 阅读 · 0 评论 -
android fat.img T卡资料制作方法
如下几句是制作fat.img的方法: mkdir fat_disk mkfs.vfat -n [挂载名称] -v -C fat.img [fat分区大小] mount -o loop,iocharset=utf8 fat.img fat_disk/ cp -rfv 资源路径//* fat_disk/ umount fat_disk/ 挂载点名称原创 2014-11-26 17:40:37 · 3003 阅读 · 1 评论 -
圆形图片代码分享
圆形图片代码分享:RoundedImageViewA fast ImageView (and Drawable) that supports rounded corners based on the original example from Romain Guyhttps://github.com/NeroWang/RoundedImageView效果图如下:原创 2014-01-16 17:01:58 · 1511 阅读 · 0 评论 -
自定义AlertDialog对话框布局
自定义对话框中的信息body布局 LayoutInflater inflater =getLayoutInflater(); View layout = inflater.inflate(R.layout.alert_dialog_content, null); AlertDialog原创 2014-10-29 11:55:06 · 5896 阅读 · 0 评论 -
Android.mk脚本判断文件是否存在
Android.mk 判断文件是否存在,若存在则复制该文件到某个目录$(shell test -f [文件] && echo yes)的值如果是yes, 则文件存在,然后进行shell cp 动作HAVE_TEST_CUST_FILE := $(shell test -f vendor/huaqin/resource/$(HQ_PROJECT)_$(HQ_CLIENT)/$(LOC原创 2014-10-27 11:28:23 · 7478 阅读 · 0 评论 -
android4.4上全屏界面实现禁止状态栏下拉
Google从KK开始增加了状态栏透明以及全屏界面有通知可以下拉状态栏的设计,而这个设计出现的隐患是设置了FULL_SCREEN的界面是无法禁止状态栏下拉的,这样对一些工程测试app可能会造成一定的影响,但是以google默认的设计,应用端无法修改此设计来满足自己的需求。MTK 内部已经开发提供新的接口来实现全屏界面禁止下拉状态栏,如果贵司的代码还没有这部分逻辑,请参考如下:1. fram原创 2014-06-17 10:43:32 · 27186 阅读 · 8 评论 -
ADB server didn't ACK 解决方法
1 现象adb server is out of date. killing...ADB server didn't ACK* failed to start daemon *error: unknown host service2 解决方法使用adb时,若出上面的错,使用adb kill-server是没有用的,因为此时是其他进程的原创 2014-09-26 23:44:24 · 1241 阅读 · 0 评论 -
Android如何修改app不在多任务列表中显示
在实际开发中,我们希望某些activity或者应用程序不在多任务列表中显示,即长按Home键或者多任务按钮键不显示最近运行的程序,我们可以在相应应用程序的AndroidManifest.xml文件中的activity标签中添加如下属性: android:excludeFromRecents=”true”比如不需要xxxActivity显示在多任务列表中: <activity原创 2015-06-29 09:40:27 · 12720 阅读 · 6 评论 -
如何修改android系统字体大小
修改字体大小的方法是运用到一个ActivityManagerNative类首先先在代码宣告 private Configuration mconfig = new Configuration();并在代码中设置要改变字体大小的值 mconfig.fontScale = 0.75f;//默认为1.0f另外,还需要在AndroidManifest.xml中加上 android:configChang原创 2015-06-29 19:36:16 · 4240 阅读 · 1 评论 -
Android 蓝牙操作
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();if(adapter != null){ if(adapter.isEnabled() { Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)原创 2011-11-01 12:51:37 · 820 阅读 · 0 评论 -
在Keyguard锁屏上面可弹出Toast消息的方法
通过调用toast的getWindowParams方法获取toast的WindowParams,再设置允许在锁屏之上显示的window flag:FLAG_SHOW_WHEN_LOCKED参考代码如下Toast mToast = Toast.makeText(InCallActivity.this, res, Toast.LENGTH_LONG); mToast.getWindowPara...原创 2019-05-07 09:54:42 · 1770 阅读 · 0 评论 -
支持Android9.0+的增量更新方案
支持Android9.0的增量更新方案增量更新相关介绍如何导入如何制作patch文件增量更新相关介绍要想打造一款优秀的应用,必须要包含的功能之一应该就是应用内更新方案了 :)本文将介绍如何在Android Studio3.3中布局属于自己的增量更新方案如何导入增量更新github代码 https://github.com/chaihuasong/AppSmartUpdate(感谢it...原创 2019-04-02 21:16:31 · 749 阅读 · 0 评论 -
android layout布局计算公式 layout-swxxxdp计算方法
sw: shortest width,最短的宽度。 sw-xxxx-dp的计算公式是 sw *160/dpi比如 1280*800, sw 是800 480*800, sw 是480其中dpi其实是人为在Android/device/softwinner/astar-common/astar-y3.mk中设定的,也可以通过 adb shell getp原创 2017-10-27 16:49:00 · 3348 阅读 · 3 评论 -
展讯平台判断otg状态
StorageUtil.getExternalStorageState() 该接口返回的是主卡的状态。 在Iwhale2上默认使用的是内卡为主卡的方案。 内卡是在data分区上模拟出来的存储。 在sd卡不存在,otg不存在的情况下,使用该接口得到的状态仍然为true。区分sd卡还是otg的话,可以使用EnvirontmentEx的接口EnvironmentEx.getExternalStora原创 2017-06-05 11:03:29 · 1118 阅读 · 2 评论 -
查看so挂在哪行
addr2line -f -e ../../../out/target/product/sp9820a_refh10/symbols/system/lib/libjni_keygen.so 0x2ff1 ./../../../prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/arm-linux-androideabi-addr2原创 2017-05-19 11:14:34 · 970 阅读 · 0 评论 -
linux下git上传代码出现^M解决方法
是用UE(UltraEdit)打开代码 CTRL + H 转码成二进制 CTRL + R 替换 将0D 0A 替换成0A CTRL+S 保存CTRL+ H 再转码成acsii 主要是解决上传到linux中出现^M时使用原创 2017-02-21 15:59:47 · 2451 阅读 · 0 评论