自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 Android 实现禁止复制

实现应用内复制的文字不被粘贴到应用外的效果

2022-09-08 15:55:03 2706 3

原创 Android SandHook 使用

Android Hook 框架使用

2022-09-08 10:37:03 1695

原创 Android Drawable对应关系和各个子类使用详解

下边是drawable中各个标签对应的实现子类,想要在java代码中实现动态编写样式可以参考xml标签Drawable实现子类bitmapBitmapDrawablenine-patchNinePatchDrawableshapeShapeDrawablelayer-listLayerDrawableselectorStateListDrawablelevel-listLevelListDrawabletransitionTransit

2022-04-21 17:30:43 2081

原创 Android离线文件预览服务

Android实现离线文件预览功能

2022-01-19 14:54:00 2718 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"> &lt

2021-09-03 15:27:15 662

原创 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 3799 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 3429

原创 Android获取底部导航高度,修复部分机型检测到但不显示问题

Android获取底部导航部分机型(华为nova,小米8等)出现了没有底部导航栏,但是却检测到了,手动给视图加高度的UI就出现了问题,下方多了一部分空白,于是查找新的方法。检测导航栏先看原来使用的方法,Android想要获取底部虚拟NavigationBar的高度,需要先检测该手机有无底部导航,示例代码如下: /** * 检查是否存在虚拟按键栏 */ @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) priv

2021-09-01 11:12:20 1744

原创 Android添加联系人到通讯录

本周项目中遇到了需要添加联系人或者添加到已有联系人的需求,联系人中需要保存的字段有很多,之前不太熟悉,在这里总结一下。联系人名字名字不知道为什么,值设置了之后传过去没有,于是自己通过Intent最后又单独传了一次// 联系人名字ContentValues row1 = new ContentValues();String name = lastName + middleName + firstName;row1.put(ContactsContract.Data.MIMETYPE, Contact

2021-04-22 20:42:20 2043

原创 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 2036

原创 Android系统分享功能

Android系统是自带分享功能的,不过也有一定的局限性,可以分享图片,文字,视频,音频等,也可以分享多图,但是不支持直接分享一个卡片(包括图文,链接),所以一般都是将需要分享的内容添加到图片中,或者通过整串文字的方式来分享。下边是几种分享方式的具体代码:action设为send或者send multiple,然后设置分享的类型和要分享内容分享文字Intent intent = new Intent();intent.setAction(Intent.ACTION_SEND);intent.pu

2021-04-09 19:52:31 4193

原创 Android清除应用缓存

第一种使用ActivityManager中的clearApplicationUserData方法,代码如下:ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);am.clearApplicationUserData();这种方式的问题就是不知清除cache,连带应用的data也删除了。如下图所示:第二种使用PackageManager中的deleteApplicationCacheF

2021-03-11 17:41:26 1554

原创 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 2833 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 4626

原创 Android获取移动网络信号强度

判断有没有SIM卡获取移动网络的信号,一定要判断是否插了SIM卡,没插卡肯定是没法获取的 /** * 判断是否包含SIM卡 * * @return 状态 */ public static boolean hasSimCard(Context context) { TelephonyManager telMgr = (TelephonyManager) context.getSystemService(C

2020-11-25 18:14:31 5824 27

原创 EthernetManager Android设置以太网静态IP

想要设置以太网为静态IP通过搜索是需用到EthernetManager,但是EthernetManager是谷歌隐藏的API,app是无法调用到的,所以只能通过反射来进行设置也可以通过下载系统的class.jar包,放到自己的项目中,就可以不用反射,直接调用下边是引入jar包直接调用的代码,通过EthernetManager 的setConfiguration方法来设置,但是需要构造IpConfiguration 和StaticIpConfiguration对象,IpConfiguration.IpAs

2020-11-13 17:19:55 2192 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 1316

原创 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 1389

原创 Android利用反射机制调用截屏方法和获取屏幕宽高的方法

想要在应用中进行截屏,可以直接调用View的getDrawingCache方法,但是这个方法截图的话是没有状态栏的,想要整屏截图就要自己来实现了。还有一个方法可以调用系统隐藏的screenshot方法,来进行截屏,这种方法截图是整屏的。通过调用SurfaceControl.screenshot() / Surface.screenshot() 截屏,在 API Level 大于 17 使用 SurfaceControl ,小于等于 17 使用 Surface,但是screenshot方法是隐藏的,因此就

2020-09-14 14:23:21 1832

原创 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 4640

原创 十大经典排序算法Java版

参考链接定义稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。1、冒泡排序(Bubble Sort)冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没

2020-08-07 09:03:04 148

原创 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 989

原创 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 2052 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 3681 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 386

原创 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 2850 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 450

原创 金融开发常用术语解释

EMV:EMV是国际金融业界对于智能支付卡与可使用芯片卡的POS终端机及自动柜员机(ATM)等所制定的标准。PBOC:中国人民银行(The People’s Bank Of China,英文简称PBOC),简称央行,是中华人民共和国的中央银行PSAM:PSAM是中国人民银行发布的识别卡,包括普通PSAM卡和高速PSAM卡。APDU:ApplicationProtocolDataUnit–应用协议数据单元。协议数据单元PDU(ProtocolDataUnit)是指对等层次之间传递的数据单位。协议数据单元

2020-05-15 13:49:55 503

原创 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 848

原创 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 2462

原创 Android组件化+MVP+Dragger2+RxJava+EventBus

Android开发规范参考文章学习Android开发的规范,主要学习到的点:1、包名划分采用PBF进行分包的好处,因为同一功能代码在同一包中,所以容易删除功能,并且降低了package耦合;拥有私有作用域,一个功能不能访问另一功能的任何东西;包大小体现出功能的问题,包太大说明此功能需要进行重构。2、命名规范主要需要记住的是静态字段命名以s开头,非静态字段以m开头,其他的规范都比较熟悉。...

2019-11-12 16:42:14 414

原创 百度地图Android API实现点聚合功能以及设置最小聚合数和最大显示数

首先到百度地图开发者平台,下载官方Demo,网址链接:http://lbsyun.baidu.com/index.php?title=androidsdk使用Android Studio开发打开BaiduMapsApiASDemo,Eclipse打开BaiduMapsApiDemo。打开实现点聚合的Demo类查看实现过程。将需要用到的工具类复制到自己的工程中,按照Demo中...

2018-09-17 20:03:15 5042

原创 ADB命令安装APK常见错误总结

通过adb命令安装应用过程:常见问题以及原因:Failure [INSTALL_FAILED_ALREADY_EXISTS]:应用已经存在,需要卸载设备中现有的。:没有找到设备,查看是否开启调试,或者数据线有问题Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]:版本不能共存,可能使用了相同版...

2018-03-23 17:08:15 7782 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除