感谢自己的努力,上个月的github提交记录看起来非常的好看。然而不期而遇的一场培训旅程中止了这一切。于是就有了我捉急的百里向ld讨要帐号的囧境。
然而并不代表今天我想写代码,还是碎碎念一下好了
1 | 这些问题都很尖锐,但是更大的问题是你内心根本就不想问 自己这些问题。当你听到大多数新开的餐厅在一两年内就关门 了,你的本能会告诉你——你的餐厅肯定不会这样。你会设法向 人们证明你是个例外,而不是认真思考是不是真是这样。你最好 停下来,思考一下在帕洛阿尔托是否有热衷于英式食物的消费 者,而很有可能根本就没有这样的消费者存在 |
1 | 非垄断者通过把他们的市场定义成各种更小市场的交集来夸 大自己的独特性 |
1 | 热衷于量化的人痴迷于周活跃用户、 月收益目标和季度收入报告。但是,你虽然可以得到这些数学, 却忽视了更深层、更难量化的问题,而这些问题,会威胁你公司的持久性 |
定位,这么多年了,早就该成熟了
但权限的修改,系统的升级,还有图商们的改动。再加上各位面对的各种app工程架构,让你很难按照官方的文档去无风险的完成编程
1 | //高德 |
华为在自己的审核机制里面加入了新的要求,在申请权限的时候附加更详细的介绍信息。并且附带了一张示例
[]
一般来说实现弹窗有以下几种常见方式:toast
,snackbar
,dialog
,windowManager.addView
。能够显示在其他应用上的显示方式只有toast
和悬浮窗这两种,由于权限限制,悬浮窗需要向用户请求相应权限,并跳转系统设置页面做修改,因此比较难以获得。因而本文重点讨论toast和dialog等形式的实现异同
toast
snackbar
dialog
1 | //dialog with system permission |
增加以下权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
在Android O后该权限被控制,需要申请悬浮窗权限
1 | Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); |
wms addview
2023年就快结束了,和2022一样,我并不怀念他
产业已经转移到了车圈,互联网已死。所以自然我也没啥好果子吃
就这样吧,希望明年能够学习更多的东西,对这个世界的认知决定你的生活,赚钱的方式
元旦快乐!
回头看过去的1年,第一次感受到来自各行各业的寒意,人们的言行举止中透露着无奈,无论是躺平,还是颓丧,都无不在教育我人类社会是多么的脆弱,信心是多么重要的一件事情。
我不禁想起了青春猪头里的第一章,学姐的消失是因为社会的氛围感。当周遭的气氛变得不再向上,当人们对所有事情都充满怀疑,观望的情绪充斥着整个社会的时候。
很多人提到现在需要闷头做事,静待花开,但是其实大家都怕方向错了,自己的人生都救不回来
所以2024会是个什么样的光景呢?对我自己来说,还是先避免在有毒环境里继续被污染吧,hope so
板子买了半年了,看代码只看了几次。但是有些基础操作可以记录一下
首先是配套的Arduino IDE里面有完整的example,通过阅读这些代码可以了解其基本的编程方式以及常用的接口。以下简单对一些例子进行解释,并标记常用函数.(待续)
语言是C.
执行文件是.ino,编译后默认引入了板子的一些定义
基础程序结构:
1 |
|
板子的一些常量:
引脚定义:
pins_arduino.h
例如自带的led是 LED_BUILTIN
在sample BlinkWithoutDelay中可以看到它的操作方式
1 | //点亮led |
上述是关于输出的,那么输入同理,参考Button
1 | int buttonPin = 2; |
一整个暑假都显得非常忙碌,鉴于自己没有换房的实力与魄力。因此选择躺平,对家里局部二装,给小家伙一个可以自在生活的空间就是这个暑假的最重要主题。
跟多年前体验人生第一次装修不同,这次选择了当甩手掌柜,于是让老爹终于可以放手跟着大干一场。每天跟着包工头带来的不同的工人,每天推进度。短短20天,把活搞完了,也算是这个夏天最大的收获。
新冠没有消失呀,大半年过去,xbb接替ba而来,趁着大家的抗毒能力大降,来了回二阳。
俺也一样,但这次实在有点绵长呀,什么流鼻涕啊,腹泻啊。模模糊糊给了来了个2星期套餐,long cvoid似乎并不是一个传说。
就这样吧,后面还有EG,多运动多吃点有营养的,大家多保重
疫情后的第一年,旅行那可实在太火了。虽然大家口袋里没钱,但心里想的都是自由,再叠加一个学生的暑假,人山人海似乎都不太好形容
虽然大家都是穷游居多,但每个人开心的表情是发自内心的。真好
趁着最后几天,带娃完成了今年的暑假之行。也解锁了新的城市——深圳。这是我近10年来第一次真正进关。虽然整个城市的饮食陌生的让人觉得不像是个广东城市(没有自己的特色),但整体的生活体验是相当舒服的,以后可以多去几次,比如说深圳东部那一带
在目前版本下,可以获取到设备目录的一些API如下:
1 | val addr1 = context.filesDir.absolutePath |
打印一下结果
1 | dir1: /data/user/0/$packagename/files |
先下结论:addr3
是我们熟悉的地址,但在新的app里面很可能用不了了(不推荐使用),后面讨论。这里推荐使用addr1
和addr2
的方式进行存储.
造成这一切的原因是Android从10开始的分区存储配置,接下来我们根据targetAPI版本进行讨论
如果应用的配置在这一范围内,那么开发者将无需为存储位置而烦恼,对于需要存储在应用外部,甚至不希望应用卸载时候被删除的数据,可以任意操纵Environment.getExternalStorageDirectory()
下的目录及文件,代价仅仅是向系统申请android.permission.READ_EXTERNAL_STORAGE
权限
targetAPI是23(6.0)以上的工程,记得先动态申请用户权限
在这一级别的工程里,如果直接调用如下代码:
1 | try{ |
以上代码mkdir
将返回false
createNewFile
将会打印出一个Exception:java.io.IOException: No such file or directory
。
但google在这里给了开发者一点缓冲的时间,只要在app mainfest中加入 android:requestLegacyExternalStorage="true"
app的访问外部存储行为可以保持在API 29
以下,不受分区存储要求限制
在这一版本及以上,APP将被强制使用分区存储,推荐使用context.fileDir
:获取APP的内部存储空间(即data/data/{packagename}/files
)context.getExternalFilesDir
:获取APP的外部存储空间(即/storage/emulated/0/Android/data/{packagename}/files
)
Flutter
和移动端的原生代码交互主要是依赖MethodChannel
实现.通过在其中一边定义CallHandler
,另一边调用invokeMethod
可以实现代码的相互调用,并获得结果
以下为一个简单的例子:
我们新增两组channel,msgbox用于原生调用flutter代码,device用于flutter调用原生代码,需要注意的是这里的调用都是可以通过回调获取返回值的(使用result.success
或result.error
),这里展示的用法是为了展示互相调用的可能性
1 | /** |
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true