- 博客(38)
- 资源 (2)
- 收藏
- 关注
原创 google auto-service找不到实现类的问题
AutoService(),在手机上正常,在目标设备出错,空指针异常,排查原因发现两个只有manifest的sharedUserId的差别。再分析,log中有以下错误。AutoService的源码中也有ClassLoader的使用,问题应该就是这儿了。最近组件化开发,使用了google的注解。manifest.xml写了。
2023-01-17 10:06:45 573
转载 SavedStateHandle使用
class TestActivity : AppCompatActivity(), SavedStateRegistryOwner { private val mSavedStateRegistryController = SavedStateRegistryController.create(this) private lateinit var saveStateViewModel: SaveStateViewModel override fun onCreate(saved.
2022-02-08 17:41:42 379
原创 android自定义view获取android原生属性
private void init(AttributeSet attrs) {// 数组必须升序TypedArray typedArray = getContext().obtainStyledAttributes(attrs,new int[] {android.R.attr.textColor, android.R.attr.background});textColorId = typedArray.getResourceId(0, -1);bgId = typedArray.g..
2021-12-02 19:33:11 2105
原创 lambda转换+排序
Set<BluetoothDevice> bondDevices = mBluetoothAdapter.getBondedDevices();List<BluetoothDevice> data = new ArrayList<>(bondDevices);List<BluetoothEntity> collect = data.stream().map(BluetoothEntity::new) .sorted(Comparator..
2021-07-19 19:44:50 206
原创 Bitmap CenterCrop
private static Bitmap cropBitmap(Bitmap src, int tarW, int tarH) { if (null == src) { return null; } int srcW = src.getWidth(); int srcH = src.getHeight(); float wScale = 1.0f * srcW / tarW; float hScale = 1.0f * srcH / ta.
2021-06-30 22:28:21 371
原创 解决windowManager.addView无法跨越导航栏的问题
WindowManager.layoutParams.flags |= FLAG_LAYOUT_NO_LIMITS
2021-06-30 22:27:25 492
原创 Wifi相关知识
监听wifi开关及连接wifi的名称WifiStatusTrackerprivate static final IntentFilter INTENT_FILTER;static { INTENT_FILTER = new IntentFilter(); INTENT_FILTER.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); INTENT_FILTER.addAction(WifiManager.NETWORK_STATE...
2021-05-28 20:32:25 360
原创 recyclerView限制高度(最大高度)
public class HeightLimitRecyclerView extends RecyclerView { private static final String TAG = HeightLimitRecyclerView.class.getSimpleName(); private int mMaxHeight; public HeightLimitRecyclerView(Context context) { this(context, nul.
2021-05-12 11:50:49 1252
原创 android dialog宽高异常的问题
Dialog会把contentView的宽度改为wrap_content解决方案是在外面再包裹一层ViewGroup就行
2021-05-10 15:32:49 592
原创 android 针对特定android版本使用系统接口
有些系统接口标志为@system api,接口的参数又带有abstract类型,无法反射调用。用以下方法可以调用到特定版本的api:下载对应版本的framework.jar包build.gradle:dependencies {compileOnly files('libs/framework.jar')}gradle.projectsEvaluated { tasks.withType(JavaCompile) { Set<File&..
2021-05-10 11:11:02 344
原创 android全屏
获取焦点导航栏又出现: getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION | WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);获取焦点导航栏也不会出现View de...
2021-04-23 11:45:13 115
原创 RecyclerView中ItemView设置LayoutTransition,解决itemView的子view减少时,RecyclerView先于itemview改变的问题
关键在于mTransitioner.enableTransitionType(LayoutTransition.CHANGING);mTransitioner.setStartDelay(LayoutTransition.CHANGE_DISAPPEARING,0);整个itemview的代码package com.cjr.learnapplication;import android.animation.LayoutTransition;import android...
2021-01-23 23:15:29 460 1
原创 仿WPS三色转圈圈动画
偶然看到wps的加载动画有点意思,试着写一个。我是先录制屏幕,把视频拆成一帧帧,然后用视频时间(ms)/图片数 = 一帧代表多少ms17 000ms / 179帧 = 95ms/帧大家也可以自己录制,拆分,自己计算。由于拆分算法不一样可能导致计算结果不太一样,不过不影响效果。...
2020-09-13 23:51:53 184
原创 Okhttp的责任链模式分析
注:本文根据okhttp-3.2.0源码分析。在OkHttpClient的创建中,有以下代码 private OkHttpClient(OkHttpClient.Builder builder) { this.dispatcher = builder.dispatcher; this.proxy = builder.proxy; this.protocols = builder.protocols; this.connectio
2020-08-16 23:28:15 404
原创 RecyclerView滑动删除与ViewPager冲突解决方法
ViewPager放了3个fragment,在第三个有recyclerView,因为是最后一个了,向左滑删除,逻辑上也不会出现问题import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;pu
2018-04-01 14:10:51 2169 1
原创 仿iOS后台通话时,通知栏的呼吸字体动画
iPone通话时,退到后台的话,通知栏会有提示“正在通话,通话时长05:12”,感觉挺不错了,仿了一个import android.animation.ArgbEvaluator;import android.animation.ObjectAnimator;import android.animation.ValueAnimator;import android.animation.Va...
2018-03-29 09:14:03 616
原创 android源码应用添加依赖包
预编译要添加在android.mk文件加上include $(CLEAR_VARS)LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \ dialer_picasso:libs/picasso.jar include $(BUILD_MULTI_PREBUILT)
2018-03-12 18:56:38 944
原创 android 4.4电话源码 :拨号流程
之前公司一直在做6.0 、7.0 的产品,突然来个4.4,差别还是有的,4.4竟然没有Telecomm,看来6.0的是从Telephony分离出来的。好了,开始了。从Dialer的DialpadFragment开始。 public void dialButtonPressed() { mHaptic.vibrate(); handleDialButtonPre...
2018-03-05 08:38:44 1312
原创 android6.0 Bluetooth蓝牙源码流程笔记
注:基于mtk平台的android6.0,由于我个人水平有限,代码细节不能详细说明,抱歉参考文章:http://blog.csdn.net/shichaog/article/details/52728684http://blog.csdn.net/baimy1985/article/details/8922508http://blog.csdn.net/yanli0084/ar
2018-01-09 09:34:06 8102 1
原创 如何在Android系统中添加系统服务(以PowerManager为例)
1.frameworks\base\core\java\android\os中添加一个PowerManager.java和IPowerManager.aidl文件,PowerManager构造函数传入一个实现aidl接口的实现类2.frameworks\base\services\core\java\com\android\server中添加一个SystemService的实现类PowerMa
2018-01-02 11:50:06 1191
原创 关于Android源码中|= (m & STATIC_VALUE) !=0 的理解
看Android源码时发现有很多地方都用这种方式private static final int STATIC_CHANGE_1 = 1 private static final int STATIC_CHANGE_2 = 1 private static final int STATIC_CHANGE_A = 1 private static final int STATIC_C
2017-12-16 14:11:46 265
原创 android Volley简略流程
Cache分发者判断有没有缓存, 没有就网络如果有,首先会看缓存保存的响应头,如果有“Cache-Control",这是个时间s,判断有没有过期,没有过期就直接返回了。如果过期了,发送请求,这个请求会把上次请求的响应头的”Last-Modified“作为参数,如果服务器返回304,表示服务器告诉你,虽然你的缓存过期了,但是服务器这边还是没改,你用你的缓存就是了,然后直接用缓存了。如果返
2017-08-07 20:19:44 266
原创 android蓝牙开发read failed, socket might closed or timeout, read ret: -1
read failed, socket might closed or timeout, read ret: -1这个问题的原因有很多种可能。一、如果设备1没开启接收服务,设备2连接它理所当然会连接失败,此时当设备1开启服务,设备2再连接也可能会失败,http://stackoverflow.com/questions/18657427/ioexception-read-failed-
2016-10-09 15:22:59 21268
原创 android在本应用中d长截图,截长图
注:这个截图是截取自己应用的图,而不是系统那种(电源+音量减)截图功能(要root或者5.1吧)做一个应用的时候要一个截图分享功能,这个图片外面还要个花边,好吧,上个粟子(锤子便签长截图)注意的是 :要截的图很长很长方法一:View.getDrawableCache()获取Bitmap,ImageView.setImageBitmap(),花边就用ImageVe
2016-04-22 17:53:10 1762
原创 Intent_filter匹配规则
一个activity可以有多个intent-filter,一个intent只要匹配到其中一个就匹配成功intent必须匹配一个或一个以上action才能匹配intent-filter成功,但是这个还没充分(一个intentkw 能有1个或者0个action)intent可以有0个或者多个category,每个都要在intent-filter中出现才能匹配成功,0个就默认匹配
2016-03-22 23:26:18 301
原创 PageTransformer使用及注意
手指从右到左,A界面跳到B界面的时候:A: 0 ~~ -1 B:1 ~~ 0手指从左到右,B界面跳转A界面的时候:A: -1 ~~ 0 B:0 ~~ 1viewpager滑动的时候自带translationx效果。比如a到b,想让a不动,view.setX(0)是不行的,因为下一次滑动会覆盖,所以要vi
2016-03-21 16:54:15 1119
原创 android缓存Bitmap
缓存是为了更快加载。比如有个gridview放上百张图片(当然用滑动时候加载也不错,假设没有用这种),每次退出这些bipmap会被回收,重新打开就要重新加载。bitmap占用内存=宽*高*单位 像素占用的字节数,最后一个看格式,argb_8888是4个字节内存缓存 牺牲了宝贵的内存
2015-12-30 11:18:31 313
原创 拖拽排序ListViewdrag-sort-listview使用方法
最近要使用一种拖拽排序ListView,上网找了一下,貌似ListViewdrag-sort-listview不错,于是去看了下用法。先给出github地址:点击打开链接不过自己用的时候各种麻烦,首先,我原本想用android studio的,复制文件夹到与app文件夹同源的目录,然后添加include和compile,syn一下,总是出现‘default’ not found的错,上网搜索了
2015-12-19 11:29:24 1439
原创 ScrollTo(x,y)和ScrollBy(x,y)
这两个方法都是view来调用的,不过与其说是view移动,不如说是手机框移动(按照正负来说),打个比方,就像拿着手机拍照,外面的风景就是view,手机屏幕就是框,当你调用scrollTo(x,y),框的左上角会移动到风景的(x,y)点上。如果你没有调用scrollTo(x,y)而是调用了scrollBy(x,y),框的左上角会移动到“ 原本的位置”再加x,y,要是你原本在(0,0),两个方
2015-12-16 21:29:45 451
原创 关于socket tcp/ip的理解
Http和Socket:http是只有客户端请求服务器才会响应,服务器不能主动发送东西。而socket是双向的,建立连接两边都可以主动发送。http的两种方法:get和postsocket的:tcp 和udp。tcp,是一种提供可靠数据传输的通用协议,udp是一个面向无连接的协议。服务器代码import java.io.BufferedReader;import java.io.
2015-12-08 19:41:44 283
原创 android4.4切换横屏的生命周期w
本来查了一下横屏切换时的生命周期,然后用自己手机测试了一下(nubia z5s,android4.4),发现和网上的不一样http://blog.csdn.net/ryantang03/article/details/7749108mainactivity代码 @Override protected void onCreate(Bundle savedInstanceSt
2015-12-07 21:24:17 335
原创 toolbar+drawerlayout仿知乎侧栏~~步骤
toolbar是android.support.v7.widget的drawerLayout是android.support.v4的,记得引用1.首先修改一下app的theme,在values/styles.xml中加入两个 false true提醒:是windowActionBar不是android:windowActionBar,版本更新了,带androi
2015-11-29 00:41:37 379
原创 新~伸缩ImageView
package com.example.scaleview;import android.content.Context;import android.provider.ContactsContract.CommonDataKinds.Event;import android.util.AttributeSet;import android.view.MotionEvent;impor
2015-11-26 21:01:55 233
转载 实现伸缩的imageview
基本照抄的,原文地址:http://blog.csdn.net/lmj623565791/article/details/23441455这是第一个版本package com.example.win8imageview.customView;import android.content.Context;import android.graphics.Bitmap;import an
2015-11-23 18:52:33 277
原创 service开个线程下载文件,并更新notification中的progressbar
activitypublic class MainActivity extends Activity { Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContent
2015-11-18 23:20:13 454 1
转载 Activity启动模式设置
Activity启动模式设置: Activity的四种启动模式: 1. standard 默认启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。 2. singleTop 如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会
2015-11-12 14:57:32 272
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人