Android
lebulangzhen
这个作者很懒,什么都没留下…
展开
-
Android 实现禁止复制
实现应用内复制的文字不被粘贴到应用外的效果原创 2022-09-08 15:55:03 · 3101 阅读 · 3 评论 -
Android SandHook 使用
Android Hook 框架使用原创 2022-09-08 10:37:03 · 1936 阅读 · 0 评论 -
Android Drawable对应关系和各个子类使用详解
下边是drawable中各个标签对应的实现子类,想要在java代码中实现动态编写样式可以参考xml标签Drawable实现子类bitmapBitmapDrawablenine-patchNinePatchDrawableshapeShapeDrawablelayer-listLayerDrawableselectorStateListDrawablelevel-listLevelListDrawabletransitionTransit原创 2022-04-21 17:30:43 · 2135 阅读 · 0 评论 -
Android离线文件预览服务
Android实现离线文件预览功能原创 2022-01-19 14:54:00 · 2830 阅读 · 10 评论 -
Android代码中动态设置ProgressBar背景
总共介绍两种方式,一种是在xml文件中写死的,一种是java代码动态设置的,第二种的优势就是可以动态设置,比如根据用户设置或者后台回传的样式来动态进行设置。第一种 xml 设置直接 drawable 文件夹下新建一个 xml 文件,配置代码如下:<?xml version="1.0" encoding="UTF-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <原创 2021-09-03 15:27:15 · 749 阅读 · 0 评论 -
Android Toast 自定义显示时长
Android Toast 只支持两种时间 LENGTH_SHORT 2 秒,LENGTH_LONG 3.5 秒,但是有场景需要自定义显示时长就会有问题,所以需要自定义实现,下边是自定义的类,通过定时器来实现长时间的显示。/** * 功能描述:自定义toast显示时长 */public class CustomToast { private Toast mToast; private TimeCount timeCount; private String message;原创 2021-09-02 11:36:36 · 4189 阅读 · 3 评论 -
Android获取屏幕宽高的三种方式
第一种int screenWidth = getWindowManager().getDefaultDisplay().getWidth();int screenHeight = getWindowManager().getDefaultDisplay().getHeight();这个方法会提示过时了,推荐后边两种。第二种DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetr原创 2021-09-01 13:20:41 · 3690 阅读 · 0 评论 -
Android获取底部导航高度,修复部分机型检测到但不显示问题
Android获取底部导航部分机型(华为nova,小米8等)出现了没有底部导航栏,但是却检测到了,手动给视图加高度的UI就出现了问题,下方多了一部分空白,于是查找新的方法。检测导航栏先看原来使用的方法,Android想要获取底部虚拟NavigationBar的高度,需要先检测该手机有无底部导航,示例代码如下: /** * 检查是否存在虚拟按键栏 */ @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) priv原创 2021-09-01 11:12:20 · 1939 阅读 · 0 评论 -
Android添加联系人到通讯录
本周项目中遇到了需要添加联系人或者添加到已有联系人的需求,联系人中需要保存的字段有很多,之前不太熟悉,在这里总结一下。联系人名字名字不知道为什么,值设置了之后传过去没有,于是自己通过Intent最后又单独传了一次// 联系人名字ContentValues row1 = new ContentValues();String name = lastName + middleName + firstName;row1.put(ContactsContract.Data.MIMETYPE, Contact原创 2021-04-22 20:42:20 · 2173 阅读 · 0 评论 -
Android utdid冲突:Duplicate class com.ta.utdid2
项目集成支付宝支付后运行报了类冲突,报错如下:Duplicate class com.ta.utdid2.a.a.a found in modules jetified-alipaysdk-15.8.02.210308182128-runtime (alipaysdk-15.8.02.210308182128.aar) and jetified-utdid-1.5.2.1 (com.umeng.umsdk:utdid:1.5.2.1)Duplicate class com.ta.utdid2.a.a.b原创 2021-04-19 14:23:29 · 2197 阅读 · 0 评论 -
Android系统分享功能
Android系统是自带分享功能的,不过也有一定的局限性,可以分享图片,文字,视频,音频等,也可以分享多图,但是不支持直接分享一个卡片(包括图文,链接),所以一般都是将需要分享的内容添加到图片中,或者通过整串文字的方式来分享。下边是几种分享方式的具体代码:action设为send或者send multiple,然后设置分享的类型和要分享内容分享文字Intent intent = new Intent();intent.setAction(Intent.ACTION_SEND);intent.pu原创 2021-04-09 19:52:31 · 4342 阅读 · 0 评论 -
Android清除应用缓存
第一种使用ActivityManager中的clearApplicationUserData方法,代码如下:ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);am.clearApplicationUserData();这种方式的问题就是不知清除cache,连带应用的data也删除了。如下图所示:第二种使用PackageManager中的deleteApplicationCacheF原创 2021-03-11 17:41:26 · 1968 阅读 · 0 评论 -
Android设置WIFI静态IP
想要在代码中实现设置WIFI静态IP需要有系统权限,要在manifest文件添加android:sharedUserId=“android.uid.system”,还要有系统签名。设置WIFI静态IP和之前以太网的类似,都是要构造StaticIpConfiguration对象,以及IpConfiguration.IpAssignment.STATIC就代表设置为静态IP,也可以设置DHCP(自动获取),不过WifiConfiguration可以直接通过WifiManager获取到,比设置以太网的要简单一些原创 2020-12-29 16:25:27 · 3144 阅读 · 33 评论 -
Android代码中实现关机
想要在代码中实现关机需要apk有系统权限,要在manifest文件添加android:sharedUserId=“android.uid.system”,还要有系统签名。###第一种方式直接使用adb shell 命令,调用reboot命令来关机try { Runtime.getRuntime().exec("reboot -p"); //关机} catch (IOException e) { e.printStackTrace();}###第二种方式电泳PowerManag原创 2020-12-21 18:14:41 · 5076 阅读 · 1 评论 -
Android获取移动网络信号强度
判断有没有SIM卡获取移动网络的信号,一定要判断是否插了SIM卡,没插卡肯定是没法获取的 /** * 判断是否包含SIM卡 * * @return 状态 */ public static boolean hasSimCard(Context context) { TelephonyManager telMgr = (TelephonyManager) context.getSystemService(C原创 2020-11-25 18:14:31 · 6149 阅读 · 27 评论 -
EthernetManager Android设置以太网静态IP
想要设置以太网为静态IP通过搜索是需用到EthernetManager,但是EthernetManager是谷歌隐藏的API,app是无法调用到的,所以只能通过反射来进行设置也可以通过下载系统的class.jar包,放到自己的项目中,就可以不用反射,直接调用下边是引入jar包直接调用的代码,通过EthernetManager 的setConfiguration方法来设置,但是需要构造IpConfiguration 和StaticIpConfiguration对象,IpConfiguration.IpAs原创 2020-11-13 17:19:55 · 2422 阅读 · 2 评论 -
Android系统设置屏幕不旋转
想要修改系统设置,需要apk有系统权限,有系统权限manifest文件要添加android:sharedUserId=“android.uid.system”,还要有系统签名,应用添加如下权限: <uses-permission android:name="android.permission.WRITE_SETTINGS" />设置屏幕是否自动旋转Settings.System.putInt(mContext.getContentResolver(), Settings.Syst原创 2020-11-02 18:04:28 · 1361 阅读 · 0 评论 -
Android应用如何重启自己
final Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName()); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); //杀掉以前进程 android.os.Process.killProcess(android.os.Process.myPid());######标志位FLAG作用:..原创 2020-09-25 09:37:48 · 1436 阅读 · 0 评论 -
Android利用反射机制调用截屏方法和获取屏幕宽高的方法
想要在应用中进行截屏,可以直接调用View的getDrawingCache方法,但是这个方法截图的话是没有状态栏的,想要整屏截图就要自己来实现了。还有一个方法可以调用系统隐藏的screenshot方法,来进行截屏,这种方法截图是整屏的。通过调用SurfaceControl.screenshot() / Surface.screenshot() 截屏,在 API Level 大于 17 使用 SurfaceControl ,小于等于 17 使用 Surface,但是screenshot方法是隐藏的,因此就原创 2020-09-14 14:23:21 · 2054 阅读 · 0 评论 -
Android中切换到主线程执行的方法
方法一: view.post(Runnable runnable)使用view对象,调用post方法即可在主线程中执行里边的代码,postDelayed则是延时执行,也可以达到相同的效果。例如:textView.post(new Runnable() { @Override public void run() { textView.setText("更新textView"); } });方法二:runOnUiThread原创 2020-09-10 17:33:59 · 4826 阅读 · 0 评论 -
十大经典排序算法Java版
参考链接定义稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。1、冒泡排序(Bubble Sort)冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没原创 2020-08-07 09:03:04 · 177 阅读 · 0 评论 -
ADB命令安装APK常见错误总结
通过adb命令安装应用过程:常见问题以及原因:Failure [INSTALL_FAILED_ALREADY_EXISTS]:应用已经存在,需要卸载设备中现有的。:没有找到设备,查看是否开启调试,或者数据线有问题Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]:版本不能共存,可能使用了相同版...原创 2018-03-23 17:08:15 · 7991 阅读 · 2 评论 -
Android组件化+MVP+Dragger2+RxJava+EventBus
Android开发规范参考文章学习Android开发的规范,主要学习到的点:1、包名划分采用PBF进行分包的好处,因为同一功能代码在同一包中,所以容易删除功能,并且降低了package耦合;拥有私有作用域,一个功能不能访问另一功能的任何东西;包大小体现出功能的问题,包太大说明此功能需要进行重构。2、命名规范主要需要记住的是静态字段命名以s开头,非静态字段以m开头,其他的规范都比较熟悉。...原创 2019-11-12 16:42:14 · 442 阅读 · 0 评论 -
百度地图Android API实现点聚合功能以及设置最小聚合数和最大显示数
首先到百度地图开发者平台,下载官方Demo,网址链接:http://lbsyun.baidu.com/index.php?title=androidsdk使用Android Studio开发打开BaiduMapsApiASDemo,Eclipse打开BaiduMapsApiDemo。打开实现点聚合的Demo类查看实现过程。将需要用到的工具类复制到自己的工程中,按照Demo中...原创 2018-09-17 20:03:15 · 5170 阅读 · 0 评论 -
RxJava2.0 Interval和IntervalRange操作符
Interval操作符先看一下RxJava的源码:public static Observable<Long> interval(long initialDelay, long period, TimeUnit unit) { return interval(initialDelay, period, unit, Schedulers.computation());}public static Observable<Long> interval(long in原创 2020-08-03 14:36:05 · 1033 阅读 · 0 评论 -
Android Canvas drawText如何支持换行
想要直接在Canvas的drawText方法中的要绘制的文本中直接使用 \n 来换行是不支持的,但是如果有这样得需求也可以自己来实现。第一种方法直接使用TextPaint就可以支持,这种方法比较方便,所有符号都会直接支持,下边附上代码:TextPaint textPaint = new TextPaint();textPaint.setARGB(0xFF, 0, 0, 0);textPaint.setTextSize(20.0F);textPaint.setAntiAlias(true);Sta原创 2020-07-28 16:34:06 · 2479 阅读 · 2 评论 -
Android Bitmap 保存图片透明背景变黑色背景
先附上一段保存图片到本地的的代码,可以使用这个方法或者直接Debug运行程序,打断点点击Bitmap的view按钮来查看Bitmap的内容public static void saveBitmap(Bitmap bitmap,String path) { try { File filePic = new File(path); if (!filePic.exists()) { filePic.getParent原创 2020-07-22 11:06:39 · 3995 阅读 · 15 评论 -
Android自定义view常用类和方法说明
Canvas常用方法绘制方法drawLine:画一条线,drawPath:绘制传入的路径drawColor:是直接将View显示区域用某个颜色填充满drawRect drawRoundRect drawBitmap drawText drawCircle drawPoint等等这些方法都和drawLine一样根据方法名就可以看出绘制的内容,按照需要传入参数即可其他方法translate:平移scale:缩放rotate:旋转save:将当前的状态保存restore:取出原来所保存的原创 2020-06-19 11:21:30 · 431 阅读 · 0 评论 -
AS报错以及Gradle插件和Gradle版本对应关系
If you are behind an HTTP proxy, please configure the proxy settings either in IDE or Gradle.可能导致这个问题的原因可能是gradle插件和gradle版本不对应,或者项目IDE版本和原版本不一致,下边是个版本的对应关系插件版本所需的 Gradle 版本1.0.0 - 1.1.32.2.1 - 2.31.2.0 - 1.3.12.2.1 - 2.91.5.02.2.1 - 2原创 2020-06-04 17:42:11 · 2934 阅读 · 2 评论 -
Android Studio常用快捷键个人总结
以下是近期总结的,平时也比较常用的一些快捷键,有助于提高开发效率,完善代码,希望能够帮助到大家。Ctrl + ShiftCtrl + Shift + W : 和Ctrl + W 配合使用,逐级向下选中Ctrl + Shift + R : 全局替换Ctrl + Shift + Y : translate,翻译功能,通过下载插件启用,在Plugins中搜索translationCtrl + Shift + U : 将选中的代码字母全部变为小写,再次使用全部变为大写Ctrl + Shift + A原创 2020-05-22 16:20:08 · 502 阅读 · 0 评论 -
Android绘制虚线变为实线,踩坑之旅
#问题先上原来代码中画虚线的代码PathEffect effects = new DashPathEffect(new float[]{5, 5}, 1);mPaint.setPathEffect(effects);canvas.drawLine(a, b,c, b, mPaint);绘制出来之后一直都是实线,怎么修改都是这样,然后在网上搜也一直没有找到合适的答案,后来发现了一篇一样问...原创 2019-12-30 11:23:18 · 904 阅读 · 0 评论 -
Gson转换导致int转为double问题解决
当我们用Object或者Map中的泛型使用了Object,我们将json转换之后,发现数据中的所以数值都变成了double类型,0变为了0.0,导致后续程序可能出现一些问题。查看Gson的源码, 会发现Object最后默认的TypeAdapter使用的是com.google.gson.internal.bind包下的ObjectTypeAdapter,里边的处理如下:/** * Adapts...原创 2019-12-30 11:22:36 · 2632 阅读 · 0 评论