android
文章平均质量分 74
markrenChina
不将变量声明为某个特定的具体类的实例对象,而是让他遵守从抽象类所定义的接口。
展开
-
android ndk编译so库,脚本编译ffmpeg5.0示例
今天收了份csdn小礼物,上来补篇博客。环境配置下载,安装什么的自己参考一下官网。从 NDK r19 开始,NDK 默认安装的工具链可供使用。与任意构建系统进行交互时不再需要使用 make_standalone_toolchain.py 脚本。简单示例(利用cmake)demo工程图sum.h#ifndef FFMPEGDEMO_SUM_H#define FFMPEGDEMO_SUM_H//一定要extern "C" 不然会链接错误extern "C"int sum(int val原创 2022-04-04 22:22:16 · 3623 阅读 · 1 评论 -
android安卓 基于CameraX和MLKIT实现中文识别Demo
实现功能,一个最简demo说明:依赖因为是实验性质,这里都是beta版本 // CameraX core library def camerax_version = '1.1.0-beta01' implementation "androidx.camera:camera-core:$camerax_version" // CameraX Camera2 extensions implementation "androidx.camera:camera-camera2原创 2022-02-09 16:04:23 · 2709 阅读 · 3 评论 -
gradle 卡 build Runing log报错Timeout waiting to lock journal cache
gradle 最近经常卡build Runingmac电脑可以看见类似错误打印在控制台,win10系统都不告诉你,默默地卡住。* What went wrong:Gradle could not start your build.> Cannot create service of type BuildTreeActionExecutor using method LauncherServices$ToolingBuildTreeScopeServices.createActionExecut原创 2021-08-18 20:48:22 · 2191 阅读 · 0 评论 -
compose UI(八)一个仿mac的全局消息工具,跟Toast说拜拜
效果:本文示例代码API基于compose UI 1.0.0Toast在compose的尴尬Toast需要上下文,这个在Compose 方法中可以通过LocalContext拿到。在其他类中可以用hilt @ApplicationContext 注入application也可以拿到,但是总有不能注入的地方比如object等等情况。Toast最尴尬的是在主线程执行,MVVM架构下,函数在viewModel拿到执行结果,反馈用户总不能一直runOnUiThread,至于handle不用好多年了。kotl原创 2021-08-12 17:29:50 · 1387 阅读 · 0 评论 -
compose UI(七)引入视频播放器ExoPlayer
本文示例代码API基于compose UI 1.0.0 ExoPlayer 2.14.2ExoPlayer简介ExoPlayer-githubExoPlayer官网-开发者文档ExoPlayer代码实验室androidView接入关于怎么接入androidView,可以参考前面的文章。@Composablefun VideScreen (){ val context = LocalContext.current val exoPlayer = SimpleExoPlayer原创 2021-08-09 23:43:01 · 3575 阅读 · 4 评论 -
compose UI OutlinedTextField默认颜色说明
本文示例代码API基于compose UI 1.0.0-bate08背景深色时,使用OutlinedTextField会有不清晰的情况,需要自定义配置颜色,outlinedTextFieldColors颜色太多,记录一下方便以后修改。OutlinedTextField( colors: TextFieldColors = TextFieldDefaults.outlinedTextFieldColors(),)outlinedTextFieldColors默认Default颜色说明(加粗比较常用原创 2021-07-23 09:32:56 · 1748 阅读 · 2 评论 -
compose UI(六)一个跑酷demo小游戏讲解分层复杂布局
本文示例代码API基于compose UI 1.0.0-bate08分层布局compose ui 中一个Column,Row都可以看成一个Layout,在这些布局中modifier都有自己的边界,想让一个组件覆盖在另一个上面是比较难以实现的。如果遇到复杂的布局,就可以采用分层布局。原理就是先画一层layout后,再画一层,或者再画n层(性能很有问题)。as bate版本新建一个compose项目,示例代码:@Composablefun Demo() { ComplexlayoutThem原创 2021-07-04 21:48:54 · 358 阅读 · 3 评论 -
compose UI(五)Lazy布局替换ListView,RecyclerView实现数据展示
本文示例代码API基于compose UI 1.0.0-bate08简单应用比如,我们现在有一个数据库映射类文件如下(room库):@Entity( tableName = "user", indices = [Index("id", unique = true)])data class User( @ColumnInfo(name = "account") val account: String, @ColumnInfo(name = "password"原创 2021-06-25 09:56:31 · 983 阅读 · 6 评论 -
compose UI(四)图形与动画
本文示例代码API基于compose UI 1.0.0-bate08图形官网说明官网说明比较简单,一共2个Canvas和DrawScope。CanvasCanvas 是一个封装过的对象,点开源码其实就是一个Spacer:@Composablefun Canvas(modifier: Modifier, onDraw: DrawScope.() -> Unit) = Spacer(modifier.drawBehind(onDraw))Canvas 封装了Spacer在它的约束原创 2021-06-18 08:39:16 · 637 阅读 · 2 评论 -
安卓apt开发kotlin 利用编译时注解生成源码Demo
项目中要减少反射,提高性能,可以apt或是aop。网上有很多java apt的文章,可是利用kotlin文章比较少,有的也不够详细。Demo 仿著名的butterknife实现一个简单的View绑定编译时注解核心三个模块,一个安卓库(实现一些需要的功能),一个java compiler库(实现编译时生成代理),一个java annotaions库(注解库)。架构我们需要新建三个模块依赖compiler 增加kapt插件和依赖,如下:plugins { id 'java' id原创 2021-06-12 21:03:23 · 3751 阅读 · 7 评论 -
compose UI(三)自定义控件和布局实现简易下拉列表Spinner
Compose UI (1.0.0-beta06)中没有现成的Spinner可用,当然也可以直接使用androidView的Spinner控件。但是我们需要利用声明式UI的好处,就是自定义非常方便。首先建一个Spinner.kt回忆之前的Spinner,需要一个String数组的适配器,一个selecter监听,指定下拉的资源(样式),传入一个pos位置信息。so,我们的入参大概就是:/** * 自定义下拉列表 * @author markrenChina * * @param modifi原创 2021-05-28 23:05:41 · 1620 阅读 · 6 评论 -
compose UI(二)融合老代码,使用非compose的view简单示例(MPAndroidChart)
compose 部分先附一个官方教程链接核心是一个AndroidView,AndroidView也是一个@Composable,他的factory方法可以接收一个非compose 的view。官方示例的核心代码是这一段:/** * ****************compose ui 中使用未实现compose版本ui的关键AndroidView采用以编程方式创建的View。如果您想嵌入XML文件,则可以使用androidx.compose.ui:ui-viewbinding库中的视图绑定和An原创 2021-05-22 09:40:01 · 1732 阅读 · 1 评论 -
compose UI(一)属于compose的页面导航,自定义实现ViewPager(Demo)
1. 声明式compose ui在简单页面可以通过隐藏,显示来实现页面切换。简单的if else 举例:@Composablefun App() { val context = LocalContext.current var isOnline by remember { mutableStateOf(checkIfOnline(context)) } if (isOnline) { Home() } else { OfflineDia原创 2021-05-10 10:23:13 · 3025 阅读 · 0 评论 -
利用WorkManager实现apk下载
jetpack加入WorkManager后,后台的实现基本上实现起来非常方便。首先,我们需要获取到新版本信息,然后如果需要更新就下载新版本的apk,2个串行的worker。app客户端部分去年写的下载客户端实现核验版本信息的worker示例:class VerifyVersionWorker(context: Context, parameters: WorkerParameters) : CoroutineWorker(context, parameters) { overrid原创 2021-04-17 10:49:10 · 1179 阅读 · 0 评论 -
jetpack Compose UI 中引入ConstraintLayout
Compose UI 中的ConstraintLayout 包在正确:import androidx.constraintlayout.compose.ConstraintLayout不是:import androidx.constraintlayout.widget.ConstraintLayout需要先引入依赖implementation 'androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha05'最新版本去ma原创 2021-04-10 15:34:40 · 185 阅读 · 1 评论 -
kotlin模拟java三目运算
kotlin没有三目运算,一直都要if else,但是如果是空判断可以用?.?:连用模拟代码:fun main(){ println("带参数1000") 判空模拟java三目运算(1000) println("不带参数") 判空模拟java三目运算()}fun 判空模拟java三目运算(variable: Int? = null){ variable?.let{ println(it) }?: println("null")}...原创 2020-12-18 16:58:08 · 1284 阅读 · 1 评论 -
tensorflow官网安卓图像分类示例无法编译解决办法
官网图像分类安卓示例无法编译是因为需要下载几个assets文件到models的assets文件夹下,具体信息在models的download.gradledef modelFloatDownloadUrl = "https://tfhub.dev/tensorflow/lite-model/mobilenet_v1_1.0_224/1/metadata/1?lite-format=tflite"def modelFloatFile = "mobilenet_v1_1.0_224.tflite"def原创 2020-12-14 12:51:03 · 1097 阅读 · 13 评论 -
安卓实现经典蓝牙通信
github demo 地址蓝牙通信基于谷歌官方经典蓝牙示例封装快速使用implementation 'com.ccand99.mark:bluetoothx:1.0.1'权限说明需要动态权限申请,demo有权限声明<uses-permission android:name="android.permission.BLUETOOTH"/><uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/原创 2020-10-30 09:50:20 · 630 阅读 · 0 评论 -
利用Kotlin扩展函数实现MODBUS协议CRC16生成和校验
获取MODBUS协议CRC16指令,只要拼接好命令,byte数组或者int后.crc16()就返回一个byte数组.验证用byte数组直接.crc16Verify()使用方式新建一个kt,复制下面的进去import java.lang.RuntimeExceptionconst val BITS_OF_BYTE = 8const val POLYNOMIAL = 0xA001const val INITIAL_VALUE = 0xFFFFconst val FF = 0xFFfun原创 2020-10-19 09:54:55 · 1070 阅读 · 1 评论 -
android studio报java.lang.NoSuchMethodError: com.intellij.ide.plugins.PluginManagerCore解决办法
插件跟不上版本的原因。windows下解决办法打开as,保持出错页面不要点确定C:\Users(用户){pc_use_name}\AppData\Roaming\Google\AndroidStudio4.1\pluginsAppData为隐藏目录AndroidStudio4.1可能是其他版本这个无所谓,目录下面所有文件压缩,完成后全选删除,删除不了的就是那个出错的jar。记录一下。as里点确认,关闭错误提示。解压缩,然后手动删除出错的文件。重新打开as另一个插件目录为C:\Users{p原创 2020-10-15 09:26:07 · 4972 阅读 · 10 评论 -
CameraX中createSurfaceProvider()被替换
androidx.camera:camera-view:1.0.0-alpha16 替换了alpha15 中PreviewView类下面的createSurfaceProvider()方法。官方最新的说明androidx.camera:camera-view:1.0.0-alpha15,还没有alpha16。所以只能靠查源码解决。通过查询发现原alpha15 中的public Preview.SurfaceProvider createSurfaceProvider() { Thread原创 2020-09-23 08:43:57 · 2618 阅读 · 3 评论 -
分享开源一个安卓手机单机游戏(未完成,仅供学习)
文章目录前言一、项目介绍二、如果想要修改说明1.怎么创建新画面2.怎么创建新的怪物3.一些逻辑上的说明写在最后源码地址前言TuoJiChuanQi是本人在学习java时候,突发奇想做的一个小游戏,算是本人第一个java项目。项目基础代码来源本人之前学的一本书籍《Android游戏开发详解》作者是美James S Cho。书上的项目还是在eclipse年代,我写时as已经是主流了。因为闲置时间过长,又是第一个自己写的,所以整理一下开源供有兴趣学习的同学。请忽略一些不规范的命名方式和一些编程规范(懒得改)原创 2020-09-06 22:52:37 · 1712 阅读 · 0 评论 -
一个监听安卓开机广播启动指定包名app的小程序
分享一个监听安卓开机广播启动指定包名app的小程序分享一个监听安卓开机广播启动指定包名app的小程序公司有一批很便宜的安卓平板,系统被阉割成没有开机广播。库存总不能不用(疫情期间采购的),然后用总不能一个一个固件的去搞,跟板子厂家沟通也麻烦。于是就写了一个小程序,固件那边实现这个小程序的自启动,然后它带其他app,再自杀。上代码:github地址:https://github.com/markrenChina/starter...原创 2020-08-31 17:29:09 · 435 阅读 · 0 评论 -
NanoHTTPD建服务端遇到前端<input type=‘file‘>文件传输及乱码解决
NanoHTTPD建服务端遇到前端上传文件例如:<input type='file' ........>这时候表单提交需要使用multipart/form-data,例如:<form method="post" enctype="multipart/form-data"> <label for="file">upload</label> <input type="file" id="file" name="file"> &原创 2020-08-02 11:47:44 · 909 阅读 · 0 评论 -
《第一行代码(第2版)》下载示例适配android8.0加简易服务端实现apk自动下载
本人新手,入行不到三个月,项目需要实现app自动更新。于是就想到抄书上这个下载示例,结果公司现在的板子用的8.0系统,运行起来直接ANR,自己又写了一个简易spring boot服务端,一个星期左右才完成的差不多。(初步翻了一下第3版好像没这个示例了,话说第2版我都没看完,第3版又出来了)。趁周日(翘加班)把可以分享的分享一下。首先android8.0服务的正确打开方式变了:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {原创 2020-05-17 14:53:32 · 478 阅读 · 0 评论