安卓开发
文章平均质量分 57
tanleicsdn
这个作者很懒,什么都没留下…
展开
-
安卓蓝牙BLE设备通讯发送和接受超过20个字节的问题
最近做的项目是手机端和BLE设备通讯,而BLE设备又做了限制一次包只能传递20个字节的数据,多了就得分包发送,在这里记录一下如何解决这个问题。(PS:之前链接什么的回调什么的 就不过多说了)1.发送数据包突破20个字节。主要是这一行:在发现服务的时候设置这个值,就会走后面的回调。成功之后设置设备主动通知时的回调这样当设备端数据改变时就会回调以下方法。完成以上操作就达到了每次发送数据时突破20个包的限制(并且可以接收到设备端主动发送的通知)2.手机端分包发送数据给设备端。这样就完成了每次发送原创 2022-06-30 15:28:11 · 6161 阅读 · 3 评论 -
安卓TV列表刷新时焦点自动变成第一个
最近在开发安卓TV项目,列表调用notifyDataSetChanged()方法刷新数据时,焦点自动就变成第一个子item去了,查了半天发现用notifyItemRangeChanged(0,list.size());用这个方法去刷新数据,焦点就不会乱跳了,但是出现了界面闪一下的情况,使用以下方法解决界面刷新数据时闪动的BUGrecyclerview.setHasFixedSize(true);((SimpleItemAnimator)(recyclerview.getItemAnimator())).原创 2022-04-28 14:20:40 · 673 阅读 · 0 评论 -
安卓TV开发遇到的那些坑
最近公司需要开发一个TV的luancher,就是那种纯物理按键的遥控,没有触摸屏,现在说说我踩得那些坑。(其实布局和代码逻辑和正常的安卓应用差不多) 1.焦点 焦点 焦点,重要的事情说三遍,安卓TV由于没有触摸屏所以需要手动设置可以获取焦点的控件。 2.设置获取到状态也就是常用的select。 3.各种事件冲突。 4.按键事件 通过重写onKeyDown(),onKeyUp()方法中监听keyCode的值,来判断用户按下的是哪个键,比如OK键 其他特殊的键值,上下左右键的话,系统会自动处.原创 2022-04-19 10:20:16 · 2391 阅读 · 0 评论 -
内容提供者(ContentProvider)的使用
有一说一,内容提供者这四大组件基本算是最没牌面的四大组件之一了。做了好几年的开发只听说过这个玩意,还从来没有用过这玩意。最近项目中需要用到这个组件,需求是子应用的数据存入到数据库(SQLite)中,然后主Launcher应用需要读取修改删除子应用的数据库中的数据,然后就用到了这个ContentProvider。分析需求实现步骤:1.子应用中创建SQLite数据库,建好表。2.子应用中创建好ContentProvider,并且定义好匹配的Uri。3.ContentProvider中重写对应方法,例如原创 2021-11-20 16:58:48 · 3249 阅读 · 0 评论 -
使用Retrofit2+rxjava上传图片 并且上传包含图片信息的json字符串。
接口文档需要传两个参数 file file(代表上传的文件) String parameter(代表图片的信息json的字符串)。在retrofit2中上传文件使用的是 @Part MultipartBody.Part file 然后图片信息的字符串是 @Part(“parameter”) RequestBody parameter(括号中的key值和文档的key值要一样)。//头像上传 @Multipart @POST("url") Observable<Base原创 2021-10-30 09:42:43 · 1675 阅读 · 0 评论 -
使用MediaProjectionManager进行截屏
最近项目中有用到远程截屏并上传截屏文件的需求。一开始使用的是以下方法进行截屏:private void screenshot() { // 获取屏幕 View dView = getWindow().getDecorView(); dView.setDrawingCacheEnabled(true); dView.buildDrawingCache(); Bitmap bmp = dView.getDrawingCache(原创 2021-09-09 20:28:58 · 4652 阅读 · 5 评论 -
获取最近使用应用列表
获取最近使用的应用列表需要使用到UsageStatsManager类,还需要申请允许防御应用使用情况的权限。private void getPackagesInfo() { UsageStatsManager manager = (UsageStatsManager) getApplicationContext().getSystemService(USAGE_STATS_SERVICE); List<UsageStats> stats = manager.qu原创 2021-09-09 17:25:04 · 1056 阅读 · 1 评论 -
通过AccessibilityService(无障碍服务)自动在设置界面打开App所需要的对应权限
最近看到一个项目比如说需要允许访问应用权限、以及录屏等权限的时候 在手机运行的时候点击跳转至无障碍界面点击打开无障碍服务,然后调转至设置界面,然后手机就自动的一步一步的打开App所需的权限,看起来特别牛逼和智能的亚子。了解了一下发现通过AccessibilityService这个类可以完成上述需求。但是由于每款手机的设置界面是不相同的,所以需要做不同的机型判断适配机型。我的是在华为 Honor 9i(Android 9.0系统)中完成自动设置权限的功能的。关于AccessibilityService类我就原创 2021-09-09 16:42:11 · 4422 阅读 · 1 评论 -
java.io.FileNotFoundException: /storage/emulated/0/ (Permission denied)
最近在做项目时保存文件时老是抛java.io.FileNotFoundException: /storage/emulated/0/ (Permission denied)异常 说什么权限不够,我在这里记录一下,权限什么的都打开了,动态权限什么的也申请了 就是抛这个异常。抛异常时的写法:1. String sdCardPath = Environment.getExternalStorageDirectory().getPath(); // 图片文件路径原创 2021-09-08 09:58:02 · 7483 阅读 · 1 评论 -
安卓后台静默拍照。
最近项目中需要后台拍照 悄悄上传至后台。public class MainActivity extends AppCompatActivity { private String[] cameraIdList; private CameraDevice.StateCallback cameraDeviceStateCallback; private TextureView mTextureView; private ImageReader mImageReader;原创 2021-06-09 15:45:42 · 656 阅读 · 2 评论 -
Launcher3二次开发修改去除抽屉,把图标展示在WorkSpace中,删除Google搜索框等操作。
导入Launcher3源码进行修改。1.删除底部Google搜索框路径:Launcher3-o-mr1/res/layout-port/search_container_hotseat原代码:<com.google.android.apps.nexuslauncher.qsb.HotseatQsbWidget xmlns:android="http://schemas.android.com/apk/res/android" android:id="@id/search_con原创 2021-04-28 09:50:58 · 1680 阅读 · 0 评论 -
AndroidStudio创建工程,添加svn忽略文件以及关联上SVN
1.使用Android Studio创建项目并且命名: 2.添加忽略文件: 3.添加至SVN:4.断开SVN连接:原创 2017-10-17 16:43:30 · 752 阅读 · 0 评论 -
popupwindow点击其它位置和点击back键不消失,以及和dialog的区别。
popupwindow点击其它位置和点击back键不消失,以及和dialog的区别。原创 2017-09-18 20:33:17 · 1136 阅读 · 0 评论 -
安卓开发帧动画使用
安卓中有时候需要使用到帧动画,比如进度条等等。先在drawable文件夹中建立一个动画文件 “文件名”.xml,其根节点是animation-list android:oneshot=”false”还需要添加上该属性 取值为boolean值,意思是播放一次还是一直重复。 然后建立多子节点: drawable属性为资源图,duration属性为该图显示的时长(毫秒值)。<?xml version原创 2017-09-04 10:51:53 · 470 阅读 · 0 评论 -
Butter Knife框架的基本使用
Butter Knife框架的基本使用原创 2017-08-31 19:04:10 · 377 阅读 · 0 评论 -
关于android:layout_weight属性你不知道的事
关于android:layout_weight属性你不知道的事原创 2017-08-21 10:34:24 · 329 阅读 · 0 评论 -
给GridView或ListView添加一个固定按钮(类似于微信群聊邀请好友按钮)
给GridView添加一个固定的尾部按钮。原创 2017-08-16 20:01:51 · 615 阅读 · 0 评论 -
安卓中使用SharedPreferences保存javaBean类对象
安卓中使用SharedPreferences保存java对象原创 2017-08-11 18:47:04 · 4018 阅读 · 1 评论 -
把自己的应用程序push至system/app下,把自己的app改成系统级别的app
把应用push至system/app中原创 2017-07-31 17:34:22 · 8569 阅读 · 3 评论 -
安卓中杀进程的方法
上一篇博客刚说到杀进程,会发现有的使用killBackgroundProcesses()方法是杀不死的。在这样的情况下就需要用到forceStopPackage()方法强制杀掉进程。各位小伙伴会发现使用mActivityManager.forceStopPackage()时该方法没有的情况。下面看看 源码:/** * Have the system perform a force stop原创 2017-07-29 15:33:02 · 1802 阅读 · 0 评论 -
获取最近运行应用方法和杀进程的方法
最近公司的项目有个需求就是获取最近手机正在运行的进程,以及杀掉进程。就是类似于安卓手机中的长按home键的效果。 先说说获取最近手机正在运行的进程方法: 直接上代码,代码中有注释:appbeans = new ArrayList<>(); //先通过系统服务获取到一个ActivityManager管理对象 ActivityManager am = (Activit原创 2017-07-28 11:36:28 · 656 阅读 · 2 评论 -
安卓中使用反射以及getDeclaredXXX()和getXXX()方法的区别
安卓中的反射以及getMethod()和getDeclaredMethod()的区别原创 2017-07-19 13:59:14 · 985 阅读 · 0 评论 -
App首页使用多个Fragment和RadioGroup连动
App首页使用多个Fragment配合底部RadiogGoup。原创 2017-07-13 00:24:43 · 550 阅读 · 1 评论 -
使用scrollview嵌套listview或gridview后出现scrollview乱滚动的问题
scrollview来嵌套listview或gridview后scrollview滚动异常解决原创 2017-07-09 01:14:37 · 526 阅读 · 0 评论 -
scrollview中嵌套listview和gridview时发生的问题
开发中关于scrollview中嵌套listview和gridview时发生的问题解决方案原创 2017-07-06 23:28:43 · 338 阅读 · 0 评论 -
安卓仪表盘自定义View
先上一张效果图:先分析实现方案:1.自定义属性,比如渐变色的两个色值、仪表盘下面的字、中间的刻度值等等。2.重写onMeasure()方法设置仪表盘的大小。(由于这是一个圆但是下方还有一个圆角矩形所以需要高度比宽度大那么一丢丢)3.绘制外层圆弧 固定颜色。4.绘制渐变圆弧。5.绘制下方圆角矩形(有两个矩形一个纯白色大的矩形,一个渐变色小的矩形)6.绘制背景文字。7.绘制中间的数值和百分号。8.加上动画 让值和圆弧动起来。1.自定义属性:(可以根据自己的新要求去定义)public Da原创 2020-12-14 15:08:02 · 785 阅读 · 2 评论 -
安卓TagLayout标签布局实现
最近要使用一个这样的标签流式布局,网上很多资源,自己试着自定义了一下效果图如上。实现逻辑分析:1.这是一个自定义的TagLayout肯定要继承自ViewGroup。2.要自动换行,那容器的宽和高是不固定的需要根据子View的多少的宽高来确定自己的宽高。3.继承ViewGroup肯定是要实现它的OnLayout去摆放子View的位置。大概逻辑就是以上三部,可以总结出来需要重写ViewGroup的onMeasure()和onLayout()方法。先重写onMeasure()方法:1.获取子Vie.原创 2020-11-03 18:08:56 · 1246 阅读 · 0 评论 -
安卓蓝牙BLE(3)
上一篇讲到连接设备,这一篇讲蓝牙设备通讯。主要用到以下几个类。BluetoothGattService:(蓝牙服务)一台蓝牙设备上最少有1个或一个以上服务。BluetoothGattCharacteristic:(蓝牙特性)一个服务里最少有1个及以上的特性。UUID:每个服务和特性都有一个特定的UUID类似于身份证号的意思。代码:在连接成功中去寻找服务:case BluetoothGatt.STATE_CONNECTED://已连接 Log.e("lee"原创 2020-10-27 17:01:45 · 1053 阅读 · 0 评论 -
安卓蓝牙BLE(2)
上一篇写到搜索蓝牙设备,这一篇写连接设备。在onLeScan回调中把设备装到一个集合中进行展示,注意此处会出现设备被重复扫描到的现象,因为设备是不停的向外发送广播的,所以需要把重复的设备进行过滤掉。(需要注意onLeScan回调方法是在异步线程中进行的,如果需要刷新UI的话,需要到主线程中去刷新UI界面。)关于界面展示列表我就不写了。下面就是连接方法了。核心方法:connectGatt(Context context, boolean autoConnect,BluetoothGattCallbac原创 2020-10-27 15:22:57 · 177 阅读 · 0 评论 -
安卓蓝牙BLE(1)
最近项目中有用到和硬件手环交互的功能。手环是一个BLE手环,需要用到蓝牙技术。1.在AndroidManifest.xml中添加权限: <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name原创 2020-10-26 11:42:25 · 318 阅读 · 0 评论 -
安卓开发人脸识别统计人脸数
最近项目需求是统计当前摄像头中的人脸个数,安卓有提供现成的Api,最终实现效果如上图。分析思路和步奏:主要使用到的类:SurfaceView、CameraManager、CameraDevice.StateCallback、CameraCaptureSession.StateCallback。1.通过SurfaceView展示预览区。2.在SurfaceView创建成功后通过CameraManager获取当前设备可用的摄像头。3.检测摄像头权限。4.通过CameraManager打开摄像头。.原创 2020-10-20 11:25:47 · 1591 阅读 · 0 评论 -
统计步数,额度的圆弧自定义View
发现很多应用中都有类似于这种的自定义控件,自己撸了一个控件。1.先自定义属性来控制圆弧的带下和颜色以及中间颜色和字体大小等在res目录下的values文件夹中创建attrs.xml文件。<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="ArcStatisticsView"> <attr name="OuterLayerColor" f.原创 2020-10-10 17:31:01 · 137 阅读 · 0 评论 -
VideoView加自定义Controller播放视频
相信做安卓开发的一般都做过播放网络视频,大家一般都会使用VideoView去播放网络视频,还有一个Controller控制视频的暂停或者快进播放等。但是Controller的样式的话不能改就特别的丑。无法满足高端的UI体验。完成一个自定义播放控制器,以及简单的横竖屏切换功能。大概记录一下流程:1.自定义MyVideoView,为了解决有可能出现无法铺满整个屏幕而导致留白边的问题。public...原创 2020-04-29 15:37:40 · 1677 阅读 · 0 评论 -
安卓使用Retrofit上传图片并且还要上传中文参数
最近项目中有用到上传图片至服务器的功能。需求是进行实名认证,需要上传姓名,身份证号,以及手持身份证正反面的功能。相信做安卓开发的大家都会使用Retrofit吧。如果上传单张图片时肯定就会使用下面这种方法:@Multipart@POST("live/realauth.do")Observable<BaseResultBean<Object>> realauth(@P...原创 2020-04-22 14:48:56 · 679 阅读 · 0 评论 -
自定义TabLayout
最近项目中有用到一个TabLayout,如上图效果。先说说需求。1.Tab的个数是动态变化的。 2.4个Tab占满一个屏幕,多余部分往右滑动过来。 3.点击后右侧小图标变化样式。思路: 1.布局的话使用LinearLayout布局,放在HorizontalScrollView中。这样就实现了滚动效果。2.获取到屏幕的宽度除以4设置成里面每个Tab的的宽度。3.每个Ta...原创 2018-05-02 11:18:32 · 319 阅读 · 1 评论 -
android使用ZXing实现二维码扫描功能
二维码现在在我们生活中基本上每天都会用到,所以现阶段开发的App很多都使用到了二维码扫描功能。说起二维码扫描基本上大家都是用的ZXing谷歌官方提供的库。以下我就讲讲在项目中如何介入二维码扫描识别功能:1.在项目的build.gradle中加入依赖库:compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar'//二维码扫描...原创 2018-04-28 15:32:06 · 989 阅读 · 0 评论 -
接入友盟推送遇到的com.ut.device.UTDevice问题
最近项目中有用到友盟推送的功能,完全按照官方接入sdk出现了以下问题: 整了我一天发现是友盟推送有用到utdid这个包implementation 'com.umeng.sdk:utdid:1.1.5.3'查阅资料好像发现这是阿里的一个双向认证的东西(具体我也不太清楚是啥)因为我之前在项目中接入过支付宝支付功能所以支付宝的jar包中也有utdid的这个包,而且还是老版本所以发生了...原创 2018-07-03 18:06:23 · 4455 阅读 · 1 评论 -
Android接入友盟推送
应用中当我们想去服务端获取数据时一般都是用的Http请求去主动获取服务器返回来的数据进行展示。但是,当服务器有新的数据需要主动告诉我们的手机应用时,该肿么办呢?这就需要用到推送的功能了。现在推送有好多家第三方的,我在这里就讲讲给我们的应用接入友盟第三方推送的步骤吧。1.先去友盟推送以应用包名创建应用http://message.umeng.com2.在友盟后台获取到通过包名创建的应用对...原创 2018-07-13 18:06:14 · 2977 阅读 · 1 评论 -
使用友盟+实现第三方登录
最近项目中有使用到友盟第三方登录:下面我就把使用友盟第三方登录的步骤分享给大家:1.第一步:去友盟+官网创建应用,申请获取到appkey。有账号的话直接登录创建即可,无账号注册一个创建应用。官网链接:https://www.umeng.com/2.第二步:确定可以使用第三方登录的平台。(我这里实现QQ、微信和新浪微博)。3.第三步:去腾讯开放平台申请APP ID 和 APP K...原创 2018-04-02 17:38:52 · 5271 阅读 · 4 评论 -
activity的onNewIntent()方法执行时机
当我们在activity的启动模式中设置为栈内唯一时,也就是android:launchMode=”singleTask”或android:launchMode=”signleTop”时,会用到这个方法。比如说在一个应用中A activity 跳转至 B activity 在跳转至 C activity 然后C做了一定的操作之后再返回A 界面。这样在A activity的启动模式设置为sing...原创 2018-03-09 09:40:08 · 5431 阅读 · 0 评论