路宇
强大自己是解决问题的唯一方法。
展开
-
Android Studio控制台中文乱码解决方案
前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。在项目调试过程中,用华为手机调试控制台没任何问题,换了一台OPPO手机,控制台log中文乱码。之后关闭Android Studio重新打开,即可解决问题。第一步找到Edit Custom VM Options。之后在studio.vmoptions中加入。原创 2025-03-19 11:23:05 · 478 阅读 · 0 评论 -
Android中华为手机三态位置权限申请理解
这样,在下次用户再次打开应用程序时,应用程序可以直接使用之前获得的权限,而不需要再次请求用户的授权。总的来说,"仅使用期间允许"更加严格,确保应用程序只能在用户使用应用程序的时候获取位置信息,而"允许本次使用"则允许应用程序在一定时间内持续获取位置信息,即使用户已经离开应用程序。思考:如果我们点击了允许本次使用,那我们在位置信息权限页面则会看到每次使用询问被选中,那是不是每次进入APP如果需要用到位置权限,岂不是每次都要申请权限,但是我测试发现并不是这样,并不需要再去获取权限了。原创 2024-05-21 18:16:22 · 4725 阅读 · 1 评论 -
Android中对MVC,MVP,MVVM架构的理解
但是随着软件越来越来复杂,会发现这样的写法不是太好,有些缺陷,Controller和View越来越耦合了,Controller指挥View去显示,具体怎么显示Controller是不关注的,比如setContentView(R.layout.activity_m_v_c),和具体的摆放逻辑全部是在xml中进行摆放布局的,但是Controller层要操控具体的数据应该放在哪个控件上,随着软件越来越大,Controller和View层的关系越来越紧密,所以引入了MVP架构。1、Model层对应的代码。原创 2024-05-07 12:03:45 · 2193 阅读 · 1 评论 -
Android中Gradle的生命周期详解
settings.gradle 执行setting.gradle文件里面的代码,把对应的项目结构给配出来。第二个阶段:定义阶段(配置阶段),通过执行多个build.gradle去画一个任务的有向无环图。如果在第二三阶段之间插代码,那么是在根目录的build.gradle文件的最后面加入。这个时候有向无环图就画好了。如果想要在第一二阶段之间插代码,那么在setting.gradle文件下。第三个阶段:执行阶段,按照任务的依赖按照顺序执行即可。这个项目先执行项目根目录下的build.gradle。原创 2024-03-13 17:18:10 · 611 阅读 · 0 评论 -
Android中compile,implementation和api的区别,以及gradle-wrapper的详解
如果你已经有被wrap的gradle,那么就使用已经有的,如果没有就下载下来进行使用。:项目变小了,只需要指定需要版本的gradle,不需要将gradle放进项目里面,如果其他人要使用该项目,只需要使用使用其他人电脑上面的gradle即可,如果没有下载下来使用。重要:当我们使用了传递依赖compile,0级项目依赖了1级项目,1级项目依赖了2级项目,2级项目代码的改动,会导致0级项目重新编译。那么就是A能使用C中的类。不进行传递依赖,2级项目代码的改动,不会导致0级项目编译,这样项目打包的总时间会变快。原创 2024-03-13 15:51:58 · 2791 阅读 · 0 评论 -
Android中OkHttp源码阅读二(责任链模式)
博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家。2、定义四个Task类,都继承自BaseTask,这里只写一个其它三个同理。2.定义一个链条管理类ChainManager。3.定义三个Task1,Task2,Task3。1、定义一个抽象类BaseTask。4、定义一个Test类进行测试。3、定一个Test类进行测试。1.首先定义一个接口。原创 2023-09-03 18:03:22 · 1743 阅读 · 0 评论 -
Android OkHttp源码阅读详解一
博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家。4、根据OkHttp中构建者模式写一个例子。4、定义一个类DesignerPerson。2、OkHttp源码阅读之线程池详解。5.定义一个类UserClient。1.定义一个类HomeParam。2、OkHttp主线流程源码阅读。1、首先回顾OkHttp的使用。3、定义一个类Worker。2.定义一个类House。原创 2023-09-03 17:52:34 · 1111 阅读 · 0 评论 -
Android Hook技术实战详解
而通过Hook技术,我们可以修改或拦截这些API的行为,以达到修改系统或应用程序行为的目的。Android Hook技术是指在Android平台上通过修改、拦截或替换系统或应用程序的API、方法或行为,实现对系统或应用程序的定制和扩展的技术手段。前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。1.首先定义MainActivity,在该类里面通过hook()方法,进行了Hook,具体注释已经在代码中给出。下面实现一个简单的例子。原创 2023-07-16 20:52:47 · 1988 阅读 · 1 评论 -
Android手写占位式插件化框架之apk解析原理系统源码分析
问题引出,在宿主app中获取插件包中静态注册的广播接收者StaticeReceiver,这个时候就需要apk解析原理系统源码分析,分析后进行再来操作。一、在宿主APP中的PluginManager类中,增加一个方法parserApkAction(),通过反射源码,来解析apk文件里的所有信息。前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。分析完apk解析原理后,然后通过反射技术进行获取对应的信息。原创 2023-07-16 10:40:18 · 786 阅读 · 0 评论 -
Android中Binder在项目中的具体使用详解
在 Android 应用程序中使用 Binder 通常可以通过两种方式实现,一种是使用 AIDL(Android 接口定义语言)定义接口,并通过 Binder 服务实现接口的跨进程调用,另一种是通过 Messenger 实现基于消息的跨进程通信。Binder API:位于 Java 层,是 Android 应用程序和 Binder 驱动之间的接口,它提供了创建 Binder 服务和跨进程访问 Binder 服务的方法和实现。在服务端B程序进行登录后,跳转到客户端程序A,打印的。原创 2023-05-30 15:21:08 · 3059 阅读 · 0 评论 -
Android GridLayoutManager.setSpanSizeLookup的使用介绍
使用setSpanSizeLookup后的效果图如下。原创 2023-03-12 11:01:28 · 1392 阅读 · 0 评论 -
Android RecyclerView的notify方法和动画的刷新详解
7、执行insert_3_2(),实际调用的是notifyItemRangeInserted(3, 2);1、执行notifyAllData(),实际调用的是 notifyDataSetChanged 刷新全部,适配器执行方法如下。7、执行move_2_4(),实际调用的是notifyItemMoved(2, 4);2、执行notify_2(),实际调用的是 notifyItemChanged(2),适配器执行方法如下。8、执行remove2(),实际调用的是notifyItemRemoved(2);原创 2023-03-11 12:39:12 · 2075 阅读 · 1 评论 -
Android 网络请求库Retrofit使用详解
1、首先在Android项目中引入需要的依赖。2、创建一个单例类,返回Retrofit对象。原创 2023-02-25 17:21:44 · 3226 阅读 · 0 评论 -
Android LayoutInflater.from(context).inflate()方法的作用
前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"",感觉非常有意思,忍不住分享一下给大家。具体详情已经写在代码注释中。原创 2022-12-24 18:26:00 · 582 阅读 · 0 评论 -
Android RecyclerView对应的适配器中方法的执行顺序和具体作用详解
1.代码的执行顺序为,首次进入会先调用getItemCount(),返回条目的个数,之后会分别调用。onBindViewHolder 作用:这个方法是用于绑定holder的,一般用来设置数据。getItemViewType 作用:修改相应position的视图类型。onCreateViewHolder 作用:这个方法用于创建条目View。getItemCount 作用:返回条目的个数。原创 2022-12-10 21:43:34 · 2040 阅读 · 0 评论 -
Android ImageView视图的七种图片缩放类型
前言ImageView默认图片居中显示,默认图片的缩放类型为scaleType属性为fitCenter。一、scaleType属性为fitCenter,默认就是这个属性。七、scaleType属性为centerInside。六、scaleType属性为centerCrop。三、scaleType属性为fitStart。四、scaleType属性为fitEnd。五、scaleType属性为center。二、scaleType属性为fitXY。......原创 2022-07-31 16:58:54 · 5705 阅读 · 0 评论 -
Android 中动画的详解(包括视图动画和图片动画)
前言:动画的介绍图片动画详解,移步这篇文章进行查看学习Android 动画之帧动画(也叫图片动画)的用法下面讲解视图动画相关的API如下(View Animation)Animation公用的功能视图启动动画后,默认是恢复到开始的状态。下面通过编码和xml两种方式实现视图动画,代码中已给出注释1、布局文件如下<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schema原创 2022-05-31 12:32:44 · 1028 阅读 · 1 评论 -
Android 中Activity和Intent的详解
Activity的理解Activity的运行状态分为四种状态对应的生命周期流程图如下Intent的理解如下Intent的分类如下IntentFilter的理解Activity和Intent相关的API如下Activity的Task Stack(任务栈)特点:后进先出Activity的LauchMode(加载模式)具体详解看这篇文章Android 中Activity的四种启动模式应用实例进行打电话与发短信,隐示意图的练习,代码如下1、布局页面activity_inte原创 2022-05-27 12:07:42 · 2600 阅读 · 0 评论 -
Android 进行友盟多渠道打包步骤详解
1、首先在AndroidManifest.xml文件中的application标签内加入 <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />2、在应用的build.gradle文件中,添加如下代码plugins { //表示这是一个应用程序模块,com.android.library表示这是一个库模块 id 'co原创 2022-05-10 12:18:27 · 1281 阅读 · 0 评论 -
Android 根目录下和应用目录下的build.gradle的详解,以及groovy语法的讲解
前言:Gradle的作用:打apk包打插件包自动化构建多渠道打包自动化签名后台java打包生成文件使用的是groovy语法,shell脚本,能够完成数据处理,文件操作groovy和java是一家,JDK支持两种语言java和groovy,在groovy中直接调用java包groovy和java进行了一个动态的补充,groovy是一个动态的语言,java是一个静态的编程语言,java处理不了的工作,可以用groovy来做Gradle的特性一、根目录下的build.gradle,原创 2022-05-09 21:37:28 · 2634 阅读 · 0 评论 -
Android 中使用Volley进行网络请求和图片加载详解
前言:Volley概述:Volley既可以访问网络取得数据,也可以加载图片,并且在性能方面进行了大幅度的调整。它的设计目标就是适合进行数据量不大但通信频繁 的网络操作。而对于大数据量的网络操作,比如说下载文件等,Volley的表现却非常糟糕。使用Volley前,需要在项目的build.gradle中引入相应的依赖:implementation 'com.android.volley:volley:1.2.1'一、使用Volley进行GET请求:1.创建activity_volley.xml,代原创 2022-03-26 10:46:52 · 4397 阅读 · 1 评论 -
Android 中使用HttpURLConnection进行网络请求详解
前言:下面使用HttpURLConnection进行POST的请求,GET请求不需要传递参数自然你也就会使用了。一、创建UrlConnManager类,提供getHttpURLConnection()方法,配置默认参数,并返回HttpURLConnection的实例。之后再写一个postParams方法,组织一下请求参数 并将请求参数写入输出流。代码如下:public class UrlConnManager { //配置默认参数,返回HttpURLConnection的实例 pub原创 2022-03-25 21:20:38 · 13446 阅读 · 0 评论 -
Android 中自定义View,实现小球往复运动
一、介绍如何实现小球的往复运动,实现原理1、View 类定义了一组 invalidate()方法,该方法有好几个版本:public void invalidate()public void invalidate(int l, int t, int r, int b)public void invalidate(Rect dirty)invalidate()用于重绘组件,不带参数表示重绘整个视图区域,带参数表示重绘指定的区域。如果要去追溯该方法的源码,大概就是将重绘请求一级级往上交到 View原创 2022-03-15 12:14:28 · 4398 阅读 · 1 评论 -
Android 中使用Canvas绘制文字和矩形,将结果呈现在Bitmap上
一、activity_view1.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" and原创 2022-03-06 15:29:32 · 3739 阅读 · 1 评论 -
Android 中ViewPager嵌套RecyclerView出现滑动冲突的解决方案
应用场景:ViewPager嵌套一个RecyclerView和正常的LinearLayout布局页面,实现左右滑动效果。当左滑RecyclerView页面想要实现左右切换页面的效果,出现滑动冲突的问题。解决方案如下:1、自定义CustomViewPager继承自ViewPager,重写其中的onInterceptTouchEvent()拦截触摸事件方法。/** * 自定义ViewPager,防止RecyclerView与ViewPager之间的滑动冲突 */public class Custo原创 2022-03-01 13:16:04 · 8895 阅读 · 0 评论 -
Android 中自定义ViewGroup实现流式布局的效果
前言:自定义View与自定义ViewGroup的区别:自定义View:在没有现成的View,需要自己实现的时候,就使用自定义View,一般继承自View,SurfaceView或其他的View。这个是控件。自定义ViewGroup:一般是利用现有的组件根据特定的布局方式来组成新的组件,大多继承自ViewGroup或各种Layout。这个是组件。自定义View的绘制流程图如下:下面来实现流式布局,定义一个类FlowLayout继承自ViewGroup,重写里面的相关方法,实现流式布局的效果。原创 2022-02-23 15:25:27 · 2220 阅读 · 2 评论 -
Android 中SQLite数据库的使用详解
效果如图所示:一、向数据库中写入数据1.首先创建数据库user和表user_info,详细的注释已经在代码中给出public class UserDBHelper extends SQLiteOpenHelper { private static final String TAG = "UserDBHelper"; //声明数据库帮助器的实例 public static UserDBHelper userDBHelper = null; //声明数据库的实例原创 2022-02-07 15:49:20 · 14710 阅读 · 11 评论 -
Android 实现点击输入框以外的区域隐藏软键盘
效果图如下:代码实现如下:首先创建一个工具类InputMethodUtilpublic class InputMethodUtil { //隐藏软键盘 public static boolean hideInputMethod(Activity activity, View view) { InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METH原创 2022-01-26 10:45:14 · 3766 阅读 · 0 评论 -
Android 实现京东秒杀功能详解
首先看效果图:京东秒杀是两个小时一个场次,我们获取到场次后,通过场次+两个小时后,获取到最终的时间,拿最终时间的时间戳,与当前时间时间戳相减,求得剩余的小时,分钟,秒数,即可实现倒计时功能!具体代码实现如下:1.布局页面activity_seckill.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"原创 2022-01-24 15:31:49 · 3282 阅读 · 0 评论 -
Android 拍摄照片后返回缩略图的两种方法详解
前言:如果简单地拍照片并非您应用的主要目标,那么您可能希望从相机应用中获取图片并对该图片执行一些操作。一、这就是第一种方法,比较简单,不用将图片保存到手机本地存储下来。下面我们看具体代码:1.首先是布局文件activity_photothumbnail.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"原创 2022-01-22 19:10:23 · 3297 阅读 · 0 评论 -
Android 中设置EditText输入框提示文本hint的字体大小
一、布局文件activity_custom_hint.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tool原创 2022-01-12 22:07:29 · 7732 阅读 · 0 评论 -
Android 保存资源图片到相册最新写法适用于Android10.0及以上
一、首先在AndroidManifest.xml中加入权限<!--读取存储卡中的内容 修改或删除存储卡中的内容--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>因为这属于危险权限,需要在java代码中动态申请。二、activity_save_image.xml 布局一个要保存的图片,一个保存按钮<?xml version="1.0" encoding="utf-原创 2022-01-09 11:28:03 · 7837 阅读 · 5 评论 -
Android 网络地址之实现检查主机名的功能
效果演示:实现步骤一、布局页面activity_inet_address.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.and原创 2022-01-06 17:37:58 · 1978 阅读 · 3 评论 -
Android 实现拍照功能,并将图片保存到本地存储
前言:实现拍照功能的主要步骤:创建照相机对象设置相机参数对照片预览照片拍摄 获取照相机所得到的图片数据,从而可以进行下一步的活动,例如保存到本地存储,进行数据压缩,通过可视化组件显示。停止照相首先是布局页面activity_camera_demo.xml,用户点击进来后,通过设置完相应的参数后,对摄像头得到照片进行预览,通过TextureView实现<?xml version="1.0" encoding="utf-8"?><RelativeLayout xml原创 2021-12-29 17:20:48 · 11888 阅读 · 6 评论 -
Android 中获取LocationProvider的三种方法和获取定位信息
前言:LocationProvider是位置源的意思,用于提供定位信息。常用的LocationProvider主要有三种:GPS:通过手机里面的GPS芯片,来利用卫星定位信息的。network:通过网络来获取位置信息的,主要利用手机的基站,和WiFi节点的位置来大致定位。passive:是一种被动定位方式,它自己不能获取定位信息,而是利用被系统保存的其他程序所更新的定位信息。下面我们通过三种方法获取LocationProvider一、首先是activity_location_provide原创 2021-12-22 21:42:09 · 6256 阅读 · 0 评论 -
Android 加速度传感器的使用详解
前言: 利用加速度传感器,实现微信摇一摇的功能。直接看AcceleratedSensorActivity类中的代码,具体注释已经在代码中给出:public class AcceleratedSensorActivity extends AppCompatActivity implements SensorEventListener { //定义传感器管理器 private SensorManager sensorManager; //定义振动器 private Vibra原创 2021-12-20 21:45:20 · 5314 阅读 · 0 评论 -
Android 中磁场传感器的使用详解
一、创建自定义View PointerView类,并且根据x轴和y轴磁场强度绘制指针public class PointerView extends View implements SensorEventListener { private SensorManager sensorManager; private Bitmap pointer; private float[] allValue; public PointerView(Context context, @N原创 2021-12-19 22:04:41 · 2595 阅读 · 1 评论 -
Android 中光线传感器的使用详解
一、首先是布局页面activity_light_sensor.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/原创 2021-12-19 20:50:40 · 3786 阅读 · 0 评论 -
Android 中使用AlarmManager设置闹钟详解
一、首先创建设置闹钟的布局页面activity_alarm_manager.xml<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.and原创 2021-12-12 22:08:14 · 5278 阅读 · 5 评论 -
Android 中Activity和Fragment生命周期的具体变化详解
前言:一个MainActivity中装载了两个Fragment,在MainActivity中的onCreate()方法中进行了Fragment的添加,显示与隐藏,默认显示的是FacilityFragment,点击导航可以切换到InformationFragment。下面我们来看看Fragment生命周期和MainActivity生命周期的具体变化:我们首次进入MainActivity时,生命周期变化如下:当我们点击Fragment中的内容,跳转到下一个Activity时,生命周期变化如下:当我原创 2021-12-08 10:55:45 · 2020 阅读 · 0 评论