iKirby's Blog
type: channel
link: https://ikirby.me/
description: Random thoughts from me.
items: 修改 Android 系统的默认二维码扫描器
items: 在 Android 上隐藏不想要的状态栏图标
items: Android 11 简单体验记录
items: 云台山游记（多图注意流量）
items: Celeste 蔚蓝
items: Google Pixel 3a 测评
items: Android 10 正式版体验与简评
items: Android Q Beta 体验小记
items: Android 渐变切换应用主题
items: 荣耀畅玩 8C 简评

修改 Android 系统的默认二维码扫描器
type: item
date: 2025-11-04T14:42:00+00:00
description: Android 从 13 开始新增了一个快捷设置图块，可以打开系统自带的二维码扫描器。在 Pixel 设备上，这个图块默认打开的是 Google Play 服务中的二维码扫描器组件，识别速度很快，还是挺好用的。因为 Google 已经停止对 Pixel 5 的更新支持，我在 Pixel 5 上刷了 LineageOS。LineageOS 的二维码扫描器图块打开的是它自带的相机 Aperture 中的二维码扫描界面。这个扫描器经常会对着二维码半天不触发识别，而且有时候识别到二维码内容后底部弹出的操作栏点按会没有反应，非常影响使用。而 GrapheneOS 的相机 Secure Camera 内置的二维码扫描功能就很好用，反应速度很快，并且在 GrapheneOS 上它也是作为系统默认的二维码扫描器的，所以可以直接启动它二维码扫描的界面。因为 Android 系统并不能直接修改默认的二维码扫描器，一开始我想的是自己写一个快捷设置图块 App 专门打开 GrapheneOS 相机的二维码扫描界面。动手之前我突然想到可以去看看能不能直接修改配置，因为 Android 系统的很多配置项是没有对应的 UI 但可以通过 adb shell 然后输入命令修改的。之前了解到默认二维码扫描器是通过 config_defaultQrCodeComponent 这个字符串配置的，于是在 Android Code Search 搜索了一下，发现会优先使用 Device Config 中 SystemUI 的 DEFAULT_QR_CODE_SCANNER，如果没有配置才会使用默认（相关代码），那就可以试试用 device_config 命令修改。于是解决方案就很简单了，连接 USB 调试，进入 adb shell，执行命令（或者直接在命令前加上 adb shell 也可以）device_config put systemui default_qr_code_scanner app.grapheneos.camera.play/app.grapheneos.camera.ui.activities.QrTile执行后再点击系统的二维码扫描器图块，就可以打开 GrapheneOS 相机的二维码扫描界面了。要还原系统默认只要把上面命令中的 put 改成 delete 就行了。需要注意的是，如果这里的 App 包名或对应的 Activity 不存在，二维码扫描图块就会变成灰色无法使用。另外如果是从 GitHub Releases 下载的 GrapheneOS 相机，包名为 app.grapheneos.camera，我使用的是它的 Play 商店版本，包名不同。

在 Android 上隐藏不想要的状态栏图标
type: item
date: 2023-01-01T14:49:00+00:00
description: 前段时间一朋友问我能不能隐藏 Android 状态栏上不想要的图标，我就想到了以前 System UI Tuner 修改的设置值 icon_blacklist。我之前看过的最早的帖子应该是这个。在自己的手机上测试了一下，这个设置在 Android 13 上依然有效，不过由于它属于 Secure system settings，在没有 root 的情况下需要用 adb 命令来修改。修改方法很简单，连接上 USB 调试后进入 adb shell，输入命令修改设置值就可以了。设置值为用逗号分隔开的图标名称。部分第三方 ROM 加上了设置界面，但是里面并没有包含所有可以隐藏的图标，仍然需要手动修改设置值（例如 LineageOS）。设置值修改后可以立即生效，不需要重新启动系统。settings put secure icon_blacklist <value>如果只设置自己想要隐藏的图标名称，可能会让系统原先默认隐藏的图标重新显示出来（如果默认有被隐藏的图标的话）。可以先使用 get 获取设置的默认值，然后在后面加上自己想要隐藏的图标名称。这个值在 Pixel 官方 ROM 上默认为空，会使用框架里预先定义的默认值。settings get secure icon_blacklist要清除设置值，用 delete 就可以了。注意删除的时候可能会出现 SystemUI 崩溃的问题（我在 LineageOS 上遇到了这个问题，不过只会崩溃一次，等它自己重新启动就没事了）。settings delete secure icon_blacklist那么应该如何知道系统状态栏图标对应的名称呢？现在 Google 提供了 Android Code Search 工具，可以很方便的搜索 AOSP 的代码。先搜索 icon_blacklist，可以找到以下代码：String ICON_HIDE_LIST = "icon_blacklist"; /** Reads the default hide list from config value unless hideListStr is provided. */ static ArraySet<String> getIconHideList(Context context, String hideListStr) { ArraySet<String> ret = new ArraySet<>(); String[] hideList = hideListStr == null ? context.getResources().getStringArray(R.array.config_statusBarIconsToExclude) : hideListStr.split(","); for (String slot : hideList) { if (!TextUtils.isEmpty(slot)) { ret.add(slot); } } return ret; }从这段代码看到当没有设置值时，会使用 config_statusBarIconsToExclude 对应的值。搜索 config_statusBarIconsToExclude 可以找到目前在 Android 13 上的默认值（在 icon_blacklist 未设置时）有两个，旋转和耳机图标，和之前版本没有变化。<string-array name="config_statusBarIconsToExclude" translatable="false"> <item>@*android:string/status_bar_rotate</item> <item>@*android:string/status_bar_headset</item> </string-array>这里的字符串是引用的，再搜索 status_bar_rotate 可以找到它对应的是 rotate。同时这个文件里也有其他状态栏图标的名称，目前 Android 13 的图标一共有这些：rotate headset data_saver managed_profile ime sync_failing sync_active cast hotspot location bluetooth nfc tty speakerphone zen mute volume wifi cdma_eri data_connection phone_evdo_signal phone_signal battery alarm_clock secure clock mobile vpn ethernet microphone camera airplane no_calling c…

Android 11 简单体验记录
type: item
date: 2020-10-15T14:54:00+00:00
description: 不知不觉又是一年，Android 11 正式版在今年 9 月 9 日发布了。现在是时候写一篇文章记录一下我从预览版到现在的体验历程。说实话，这类的文章似乎没什么人看，不过我还是按照惯例写一下。按照惯例，Google 一般会在三月发布第一个预览版。没想到今年却在 2 月 19 日就发布了第一个开发者预览版。和之前一样，这时无法从 Android 10 直接通过 OTA 更新，需要手动安装，但是安装后可以收到后续的预览版更新。我使用 adb sideload 保留数据升级到第一个预览版。第一个预览版真的是一言难尽，有点 Android P 第一个预览版那感觉了。对于预览版来说有 Bug 也正常，但是这次预览版的 Bug 完全影响了正常使用，包括最基本的电话功能。因为网络定位不能用，来电时如果手机在睡眠就很大概率不会响铃，我只好解锁刷回 Android 10。具体的好多东西我也不记得了，当时的截屏也没留备份。对于我来说这个版本最大的改变应该是开始支持一次性权限，可以只在这一次使用应用时允许，下次打开应用就需要重新授权，不过仅限相机、麦克风和位置。之后的开发者预览版我都用过，但是都又回到 Android 10，因为来电不响的问题。终于等到六月，Beta 1 发布了，从这个版本开始可以加入 Beta 计划直接更新。不过从这里开始整个系统的变化也不大了。下面的一些截屏有的来自 Beta 版，有的来自正式版。按照惯例先说说彩蛋吧。连续点按版本号，看到调节旋钮，向后倒三次，就可以拨到最右侧的位置，激活彩蛋内容。彩蛋内容利用了 Android 11 新增的设备控制功能，激活后，在电源菜单添加即可。设备控制功能默认启用，如果安装了支持的应用，就可以将控件添加到电源菜单，方便控制智能家居设备。我也没有这样的设备，于是就体验了一下，从设置里把这个功能关闭了。这里有一个我感觉不太好的地方，关闭这个功能后电源菜单仍然是全屏样式，下半部分就是空白的，看起来有点丑。系统的彩蛋还利用到了新的气泡聊天，在电源菜单添加控件并开启后，等待一段时间就可以捕捉到猫猫。这时可以在通知中点按右下角的按钮（需要应用支持才可以），启用气泡模式。聊天气泡会显示联系人的头像，并直接弹出聊天消息内容。点按气泡可以进入浮窗，浮窗中是应用的界面。直至本文写作时，我所使用的其他应用，只有系统的 Messages 支持聊天气泡，其他应用都没有支持（Telegram 支持了，但是我用的是 Telegram X，很久没有更新过了）。系统对于通知方面还有其他的改进，长按通知显示的优先级调整有所变化。如果将通知标记为优先，对于会话通知，状态栏中的小图标会显示联系人的头像。这张截图里还可以看到新的截图界面，可惜的是滚动截图最终还是没能在正式版中出现。系统还支持了通知分组，会把会话通知、无声通知等进行归类，在通知抽屉中分组展示。常年隐藏在设置应用小部件中，被很多人作为通知历史记录用的的“通知日志”，现在有了一个对用户友好的“通知历史”界面。默认是关闭的，启用后就可以查看近期划掉的通知和过去 24 小时的历史（因为涉及隐私就不发截图了，全屏马赛克也没什么可看）。新的 Pixel Launcher 在视觉效果上没什么变化，只是左右滑动时加了一点回弹效果。比较大的变化是增加了新的应用建议功能。现在可以把托盘区域设置为应用建议，这些应用会根据近期使用、经常使用和日常使用习惯改变。长按托盘的应用可以将其固定或者设置不再建议，也可以将常用的应用放到托盘取代建议位置。启用这个功能后，托盘区域原有的图标会被移动到上方页面的底部一行。要我说的话我感觉是很别扭的，所以体验了一下这个功能后我就把它关闭了。可能是因为新的建议功能，Google 移除了最近任务界面下方的搜索栏和应用建议。说实话，我觉得在最近任务下方显示可能是更好的方案，这样更方便在常用应用中切换。移除了搜索栏和应用建议，取而代之的是截屏和选择按钮。点按截图按钮就可以对当前应用截图，但是不含状态栏和导航栏内容。选择按钮则是直接高亮所有的可选取的文字和图像，直接长按内容仍然可以触发选取。截图中还有一个分享按钮，是测试版时候的，后来取消了分享按钮，只留下了前两个，并且改为了横向（图标在左文字在右）的布局。分享按钮就是直接分享当前应用的截图而不保存。说实话我感觉挺方便的，因为有时候确实只是想分享一次，并不需要保存。还有一个很棒的功能就是媒体控件。应用在播放媒体时，快捷设置下方会显示媒体控件，方便快速进行操作。如果有多个媒体应用在运行，则可以左右滑动切换控件。控件右上显示的是当前输出音频的设备，点按可以快速切换。这里也有一个不太好的地方，为了给媒体控件让位置，快捷设置展开后变成了两行。即使没有启用媒体控件或当前没有这类应用在运行，也不会变为之前的三行。这对于添加了较多快捷…

云台山游记（多图注意流量）
type: item
date: 2020-09-16T14:39:00+00:00
description: 今年夏季国内疫情基本上控制住了的时候，我就开始打算出门玩一圈。天天呆在城市里，也会想接触一下大自然，于是就联系朋友商量这件事。本来是打算去青海湖的（因为看到了这个视频），但是突如其来的一波疫情反弹，让我们的这个计划直接取消了。最终和朋友确定了到一个离得比较近的地方，焦作云台山。虽然定下来了，但是那段时间天天阴天雷雨，根本不适合外出游玩，只好慢慢等晴天，最终终于等到了 8 月 25 日的晴天（从天气预报来看）。老实说天气还是有点靠运气的，虽然预报天气是多云转晴，但是看夜间天气是有几率下雨的，并且 24 日傍晚还下了一场阵雨。看完天气预报，和朋友简单商量了一下，决定第二天直接出发，不再等了。事实证明我们的选择没错。第二天早上，风轻云淡，天气非常好，而且也不是很热。因为这边车站直达的车次取消了，所以我们计划的是转车前往景区。到车站会合后，正打算买票的时候，听到在售票厅外面招揽乘客的“黑车”有人问去不去云台山。我们问了一下价格，正好，而且是直接送到，省去了转车浪费的时间（如果乘坐非直达景区的大巴车，一般中间还有停站，也会浪费时间），于是直接坐了这趟车到景区。到达景区后，我们直接在线订票，然后刷身份证进入景区。可能因为是难得的晴天，游客非常多，等了十几分钟才坐上从游客中心进入景区的观光巴士（门票包含景区内交通，进入景区后，观光巴士和公交可以随意乘坐，无需再验票）。观光巴士的体验还是不错的的，有空调，座位上有安全带。公交车好像是因为旅游旺季观光巴士不太够而从焦作市里临时调过来用的，就是标准公交车配置，没有安全带，也没有空调，是电动的。为了之后更省心，也可以少带一些东西（不然背太多东西就没法放开玩了），我们在景区内最大的服务区下车（岸上服务区，正好晚上的“云台山电音节”就在这边的停车场附近举办），先寻找住处。刚到岸上服务区，换乘站旁边就有一个附近酒店来拉客的人。我们问了一下价格，感觉挺合适（三人间 100 元/天，有空调、Wi-Fi、电视），就同意跟着去看看。房间很大，没有装修（就是简单的白墙），很干净。我顺便上房顶看了一眼，虽然只有两层楼，但是从房顶看出去感觉很舒服，而且离夜市那边比较远，晚上不会太吵闹，也不会有太多灯光。定下了住处，时间已经接近中午了。我们简单吃了一些带的东西，就到换乘站，准备前往第一个景点——红石峡。根据观光巴士上面的广播，这是云台山的核心景点（好像很多地方都有叫红石峡的景点）。大约十分钟的时间，车就到了红石峡。从路边的入口进入，需要走一段时间才能到达红石峡中部。景点内游客非常多（刚才车站几乎所有人都下车了），一开始还好，过了一会儿就非常难受，跟火车站排队的感觉差不多，队伍在狭窄的游览步道上慢慢前行。中途会经过一个山洞，很窄而且平均高度只有 1.75 米。身高高一些的话在很多地方都需要低头。洞内 RGB 灯效感觉有点阴间，我感觉可能用弱一些的白光更舒服。过了山洞，仍然是很长一段在崖壁上的步道。沿着步道继续走，高度降低，慢慢往红石峡底部前进。这里已经是比较低的地方了，又离水很近，所以逐渐凉快起来。途中还可以看到几个小瀑布，我觉得一般般，没什么看头（主要还是体验山水自然嘛），不过按照游览图上来看，每个瀑布都有名字。快到底部的时候，有个岔路不让游客进入，我推测是近期下雨比较多，下面可能被水淹了。再走没多久，就到了红石峡景点的最后。这里是比较大的一个区域，在一块非常大的石头上面，有很多人在这里拍照休息。我们在这里休息了大概半小时，就从旁边的出口往上走了。往上走了一段时间，到了一段平整的道路，不用上下阶梯，感觉轻松许多。这段路上面搭着架子，架子上挂满了假花，应该是因为这段路两边没有山崖也没有比较高的树木，太晒了，所以人工制造一些凉荫。走过这段路就算游览完了红石峡，来到子房湖水坝。子房湖据说是因汉代张良（字子房）而得名。大坝上面的一侧是很多卖小吃和纪念品的。子房湖这边也就是看看而已，我们没有玩水上游乐项目。走过大坝就是景区观光巴士换乘站了。这个换乘站可以前往茱萸峰和小寨沟。按照计划，我们坐车前往小寨沟。小寨沟主要由三个景点组成，泉瀑峡，潭瀑峡和猕猴谷。从景点入口进去后离景点还有一段距离，是一个大广场，一侧是小寨沟景点的水上游乐项目，另一侧是休息区和美食城。因为猕猴谷离得最近，我们决定先去猕猴谷。在猕猴谷入口的路牌旁边休息一会让之后，我们继续前进。路上没什么景色，走到里面猕猴观赏区也没见到猴子。观看猕猴表演的凉亭周围聚满了人，然而并没有猴子（感觉好坑）。停了一小下，我们决定直接从出口道路离开。往出口道路走的时候看到工作人员牵着两只猴子，应该是要进行猕猴表演。不过我们没有看，直接就离开了。另外，景区里有好几处挂有牌子，提醒游客小心猴子出没，但是在这些地方我们都没见到猴子。从猕猴谷出来后，就感觉真的很累，而且因为和想象中差距有点大，感觉…

Celeste 蔚蓝
type: item
date: 2020-08-12T13:29:00+00:00
description: 此文章并非游戏测评，只是记录下自己的游玩过程和感想这个“爬山”游戏（不会还有人不知道吧）早在 2018 年 1 月我同学就推荐过给我。我本来是没有打算玩的，因为自己已经很久没有玩过这么硬核的横板游戏了（Ori 不算硬核，熟悉了操作之后就非常简单了）。游戏本身售价也不便宜（$19.99），我也就没继续关注了。同学初次给我推荐这个游戏，我看了看视频，没有玩。几天后，他第二次推荐我直接拒绝了。直到最近，itch.io 为了支持种族平等推出了 Bundle for Racial Justice and Equality 筹款活动，最低只需要花 $5 就可以买下包中所有游戏。当时我觉得挺划算，买了。之后发现里面有 Celeste（其实有这一个就不亏，另外还有不少好游戏），就下载下来玩玩看。itch 下载的是无 DRM 的版本，给个好评。解压后直接运行，发现打不开，网上搜了一下需要安装 Microsoft XNA 框架，安装后可以正常运行。游戏默认使用集成显卡运行，不过这样的画面完全无压力。游戏的剧情就是主角 Madeline 攀登塞莱斯特山（Celeste 的音译）的故事。我觉得整个剧情设计不能说多好吧，不过和玩家游玩过程突破难关还是比较对应的。因为之前只是简单的看了看视频，所以开始玩的时候我是几乎什么都不知道的。遇到的第一个难题是键位，因为之前经常玩 Ori，下意识的想按一些按键，导致经常按错。我先尝试把按键键位设置为和 Ori 纯键盘操作差不多的，但是最终放弃，因为游戏中太多地方需要用到冲刺，一直用小拇指按 Ctrl 太难了。然后我把键位改成很早以前用模拟器玩游戏的键位，但是用起来还是很别扭。最后还是改成了和 Ori 差不多的键位，但是用 X 来冲刺。本来感觉这样改挺好，但是玩了一段时间之后又发现了问题——我还是想按 Ctrl 冲刺。好在多玩了一段时间后慢慢习惯了，有时候手还是不听使唤，不过按错的概率小多了。游戏的关卡设计确实很棒，由简单到困难，把游戏中的能用的操作、技巧一个不差的全都考虑到了。不得不佩服游戏开发者在这方面的能力。正常过关（仅限 A 面，前 7 章）用不到什么非常极限的操作，一般来说多试几次总能过去。但是如果要收集草莓，就比较麻烦，操作很极限，而且有些草莓在用了冲刺技能后就会飞走（这是什么神奇的设定...），太难了。背景音乐还算不错，但是经常死，反反复复重新来，一个 BGM 一直听，会有些烦。另外第七章好像全程都是一个或者差不多的 BGM，感觉不是很好。最终我花了 9 小时 42 分钟通关 A 面。死亡 2618 次，收集草莓 87 个。中途差点弃坑，因为第四章的云。如果要我说的话，云就是这个游戏设计最大的败笔（可能因为我并不是硬核玩家）。云类似平台，踩上去会有弹性，借助弹力可以跳的很高。但是这个云触发高跳的时机非常短，要求太苛刻了，以至于刚开始玩几十次都不一定成功一次，而且还有粉色的云，只能踩一次。由于云在踩上去回弹的时候会把主角略微弹起，粉色的云上不能停留，真正的只能踩一下。这里真的是太太太恶心了，想不出任何其他词汇形容这个设计。还有一点让人感觉很不舒服的就是“帮助模式”。在首次选择帮助模式时，游戏会显示一个简要的介绍，其中有一个画面是下面的内容。我觉得这是又一个恶心人的地方，虽然和正常游戏流程关系不大。“帮助模式”可以修改游戏规则，就像之前玩模拟器游戏里面的“金手指”，说白了就是作弊。这个地方给我的感觉就是“既然你很菜我就给你作弊”，让人感觉很不好。另外帮助模式可以跳过关卡，都这样了，怎么不来一个直接通关的选项（我都花钱买游戏了，为什么还要花时间玩？）。我认为还不如给一个难度选择，手残玩家可以选“简单”，增加一些存档点或减少部分障碍，降低追逐战的速度等。至于后面的 B 面和 C 面，第八章，第九章，我连碰都不会碰了。看过视频就知道了，明摆着就不让一般玩家摸的东西。后面那么多内容门槛设计的这么高（尤其是 C 面和第九章），不是恶心人是什么？现在每天学习工作那么忙，谁会有大把的时间在这里一点一点重试？而如果我用帮助模式通关了又有什么意思？我建议默认模式不能通关就直接放弃游戏好了，没必要去整什么帮助模式，太没意思了。有这点时间，还不如去看一看 TAS 视频，观赏性很强。最后给个整体评分吧，7/10，勉强可以推荐给有大把空闲时间，并且手不残的玩家。通关还是有点成就感的。而如果你非要尝试的话，A 面通关就行了，后面不是给人玩的。本身好像是正能量的游戏能给我这么难受的感觉，也是没谁了。至于打算喷的人也就别喷了，我就是菜，玩不起这么牛逼的游戏。哦对了，第六章整个直接摔下山，后面强行每一关的元素重新玩一遍，真的能把人气死。补充，前面写的时候想到那个云就越想越气，可能说的有些过分。但是不想改了，就这样吧。

Google Pixel 3a 测评
type: item
date: 2020-01-01T12:23:00+00:00
description: 还是先跨年吧，祝大家 2020 新年快乐。10 月之后感觉手里的一代 Pixel 的电池越发不耐用，而且还出现了低电量时拍照处理过程直接黑屏关机的问题。其实在这之前就有想过换电池，然而看了 iFixit 的换电池教程之后，果断放弃了。万一换电池没搞好把屏幕弄坏了，连测试机都没有了。于是观察了一段时间亚马逊上面 Pixel 3a 的价格（别问为什么不买 Pixel 4，没钱），在打折时候入手了 Purplish 颜色的 Pixel 3a。经过两个星期的等待，手机终于由 DHL 送到了我手上。盒子比 Pixel 1 的盒子小得多，配件也缩水不少（二代往后的似乎都是这样）。配件只有充电器、双头 Type-C 数据线以及卡针。充电器的参数和 Pixel 1 的一模一样，甚至型号都是一样的，是 18W USB-PD 快充。除此之外，还有说明书和信仰贴纸。Pixel 1 的配件则还有 USB Type-A 转 Type-C 转接头和 USB Type-A - Type-C 数据线，还有一本小册子简单介绍 Pixel 的特色功能（大概是第一次做手机，想要显得更有诚意？但是 Pixel 1 销量似乎并不高）。外观外观并没有什么特别的地方。后盖还是 Pixel 经典的两段式设计。不过受限于成本，Google 并没有采用玻璃或是金属两种材质组合，而是对下半部分做了磨砂处理。虽然是塑料后盖，但是观感和手感上并不感觉廉价。下面的照片使用 Pixel 1 拍摄。后置单摄像头，采用了和 Pixel 3 相同的 IMX363 传感器，拥有和 Pixel 3 持平的拍照水平。正面来说，就更没什么特别的了。边框也不算窄，可以说是标标准准的中等配置机型。屏幕比 Pixel 1 要大一些，不过也更长一些，所以单手握持感觉差不多。之前我是不怎么喜欢圆角屏幕的，用习惯之后感觉也还不错。顶部有一个麦克风开孔和 3.5mm 耳机接口，底部为扬声器、充电口和麦克风。播放声音时顶部听筒作为另一个扬声器，实现双扬声器的效果。音质我觉得还可以，至少比 Pixel 1 单扬声器效果好不少。之前忘记说了，上面照片拍摄时系统已经自动启用了 Night Light，所以颜色比较黄。这块屏幕的显示效果挺不错，支持根据显示内容自动调节色彩。显示设置中的颜色可以选择自然（sRGB），增强或自适应。系统和软件系统是原生 Android 加上 Pixel 体验。我拿到的这台预装的是 7 月安全补丁的 Android 9。到手后完成设置向导，我就直接解锁刷了最新的 Android 10（说起来也很巧，拿到 3a 的第二天，11 月安全补丁发布，Pixel 1 更新停止）。整体上来说，和 Pixel 1 差别不大。不过首次完成设置向导，主屏幕上的“一目了然 （At a glance）”微件会提醒查看 Pixel 的功能介绍（下面两张截图是在更新了 12 月安全补丁和接收到 Pixel Feature Drop 之后）。手势设置中，之前 Pixel 1 的手势全都支持。另外新增了两个设置：Active Edge（握压手势）和 Flip to Shhh（翻转静音）。Active Edge 只能用于快捷打开 Google Assistant 或静音闹钟和电话，不过使用第三方应用可以自定义。翻转静音我觉得很实用，现在很多手机都有这个功能。Now Playing 是 Pixel 系列的一个特色功能，可以依靠手机中存储的一个数据库离线识别歌曲并显示在锁屏上。这个功能从 Pixel 2 开始加入，但是一直没有被下放到 Pixel 1，也没有成功移植到其他设备的消息（许多第三方 ROM 把这个功能改成了显示手机上播放器正在播放的音乐信息）。Now Playing 实际用下来体验挺好，我听的英文歌几乎都可以识别出来，部分中文和日文歌也能识别。在设置里面可以查看历史记录，点按可以分享或者查看详细。时不时打开看看之前不经意之间附近播放过的音乐也是挺有意思的一件事情。随着 12 月更新的推送，一些 Pixel 4 才有的功能也更新到了旧一些的设备上。例如“样式和壁纸”，可以自定义图标、形状和颜色。比较怨念的一点就是 Pixel 3a 并没有自带动态壁纸，而且官方人员说 12 月更新后壁纸里面出现的空白分类是 bug，那些动态壁纸并不支持 3a。实际上 3a 的性能足够运行 Pixel 动态壁纸，手动安装后可以正常使用，耗电量和资源占用也都在可接受范围。12 月更新带来的另一个惊喜就是 Pixel Feature Drop，将一些功能下放到了旧的设备上。例如下面的 Live Caption 和新的录音机应用。Live Caption 目前仅支持英语，效果还算可以。录音机的实时转换文字功能也是仅支持英语，不过它还可以识别语音，音…

Android 10 正式版体验与简评
type: item
date: 2019-10-03T15:36:00+00:00
description: 写这篇的时候，距离 Android 10 正式发布已经过去了将近一个月时间（懒.jpg）。不过经过大概一个月的时间，对正式版的体验和使用也更全面（其实正式版和 Beta 6 就差了启动画面的 Logo，Bug 应该是一个都没修，后面会说到）。正式版于 9 月 4 日发布，版本号为 QP1A.190711.020。从 Beta 6 更新的话，一代 Pixel 收到的是一个 5.7MB 的更新。彩蛋为 Android 10 Logo。长按可以旋转和移动图形，组成“Q”的样式后，再连续点按可以打开一个像素画谜题，图案都是系统中的图标。Android 10 的一个重点就是手势导航了，肯定要放在前面说。手势导航于 Beta 3 加入，后期除了返回操作和侧滑的导航抽屉冲突的解决，没有太大变化。说实话和 iOS 的手势挺像，都是下面一个长条，上划直接返回桌面，上划并停住打开最近任务（概览屏幕），左右划切换应用。不同的地方就是在 Android 上需要返回键，从屏幕左侧和右侧划入都是返回操作。为了解决和导航抽屉的冲突问题，Google 最初采用了使用新版本 DrawerLayout 库来自动避免冲突，或是开发者手动指定检测返回手势的区域避免冲突。但是这一方案对于旧的应用显然不适用，于是从 Beta 5 开始改为了“Peek”操作，当需要用手势操作打开导航抽屉时，先按住屏幕边缘，抽屉便会显示出来边缘，再拖动即可。另外，在 Beta 3 就可以先从边缘向上或向下滑动一点点距离，避免系统检测到返回手势，就可以成功打开抽屉。刚刚使用的时候确实感觉很别扭，不过用一段时间习惯了感觉还好，还可以设置返回手势的灵敏度，根据自己的偏好选取最合适的。上图右侧是设置中的 Assistant 设置界面。在 Pixel 2/3/3a 上，这里有挤压侧边呼出 Assistant 的设置。上面的预览图是之前见到过的测试的 Assistant 界面，不过我到现在都还没有体验到这样的界面。Android 10 另一个比较重要的变化就是通知。现在通知中的静音的通知会被单独分出来显示，更方便查看重要与不重要的通知。长按通知可以设置对应的通知频道的提醒可见度，选择允许发出声音和震动或是静音。另外左右滑动通知来设置延后提醒的操作现在默认关闭，需要使用的话可以在通知设置中打开。通知设置可以由通知助手自动管理。系统默认使用 Android Adaptive Notifications，另一个可选项为 Device Personalization Services，不知道第三方应用能不能设置为自适应通知的管理服务。系统中也终于有了可以直接重置 Device Personalization Services 数据的入口。系统默认的自适应通知对于某些应用的通知可能有些问题，比如说 QQ 轻聊版的通知可能会被自动设为静音，导致错过通知。Device Personalization Services 前身是 Action Services，为系统提供个性化的建议以及最近任务卡片中长按选取文字和分享图像的功能。在 Android 10 上，Pixel Launcher 的常用应用也由这个服务提供。通知中的快捷操作功能也得到了增强，可以直接调用对应应用打开链接。对于媒体通知，从通知中可以直接拖动进度条，调整播放位置。之前的文章也说过了，Android 10 支持设置应用只有在前台时才可以获取位置信息。如果允许了应用后台获取位置，系统会在应用第一次在后台获取位置时发送通知，提醒用户某个应用在后台获取了位置，是否要修改设置。另外得益于 Device Health Services 对电池使用情况的预测，Android 10 节电模式的触发条件新增了“当在常规充电时间之前电池可能耗尽”的选项。如果选择了此项，系统会根据电池使用情况，如果设备使用比较频繁，在你每天通常的充电时间之前电池可能耗尽的话，就会自动启用节电模式并发送通知。除了以上说的一些新的内容，Android 10 最终没有启用存储沙盒功能，沙盒功能相关的内容也全部去掉了，只能等明年的 Android R 了。不过对于 Target SDK 为 29 的应用的存储访问限制还是存在的，尽管应用可以自己选择退出。最后说说我这一个月来使用 Android 10，对首个正式版的简单评价：流畅度高，但细节打磨不到位。新功能和手势操作我觉得不错，但是返回手势有待优化，和需要从边缘滑动操作的应用还是有一些冲突，有时候不能正确操作。系统流畅度很高，即使在已经三年了的 Pixel 上；已经半残的电池，待机还是很给力，有时一晚上甚至可以不掉电。细节问题还真不少，例如可以“卸载”的硬件，快捷设置分页出错等。甚至还出现了严重的内存泄漏问题，并且从这个 Issue 的回复 …

Android Q Beta 体验小记
type: item
date: 2019-03-25T08:29:00+00:00
description: 3 月 14 日，Google 发布了 Android Q 的第一个 Beta 版本。本以为一代 Pixel 已经没有系统版本升级了，所以我也没有特别期待，就只是打算简单看一下新功能相关的消息。然而没想到的是，一代 Pixel 竟然也有预览版本更新，激动的我立马起床，加入 Beta Program 然后检查更新。更新过程很顺利，但是更新完就遇到了问题，微信和摩拜单车都会崩溃，还好带了 Nexus 5 ，在那上面安装了微信临时用（之后又把 Nexus 5 重新刷了一下，最近应该都需要用了...）。还是和以前一样，我并没有刻意去寻找和尝试所有的新功能，只是看了我感兴趣的和基于我自己的使用体验来撰写的文章。从 Android 9 直接 OTA 更新的包大小为 985.8 MB ，更新后， Android 版本显示为 Q ，安全补丁等级为 2019 年 3 月 5 日，版本号为 QPP1.190205.018.B4 ；彩蛋则没有变化，仍然是 P 的彩蛋。系统整体的视觉效果没有太大变化，能一眼看出来的，除了 Pixel Launcher 的概览屏幕卡片圆角更圆一些，就是设置的 ActionBar 变为黑白和更多的 Google Sans 字体使用。现在每个设置项的标题都采用了 Google Sans 字体，初看有些不习惯，用多了感觉还好。从上面的图也可以看到，应用信息界面进行了重新设计，主要的操作按钮更清晰明了，“通知”一项下面会显示应用一段时间内发送的通知数量。另外，对于系统应用，原先的“停用”和“启用”选项改为了“卸载”和“安装”，实际作用没有变化。Android Q 的一个重点是权限和隐私方面的改进，下面就来说说相关的一些变化。最重要的变动之一就是位置权限，现在可以选择当你在使用应用时才允许。我之前在用 YR 这个天气 App ，当我把它的位置权限设置为仅在使用时允许后，它的天气通知就会提示无法获取位置。设置中新增了独立的“隐私”部分，单项权限的列表也按照权限授权状态做了分类。新的 Package Installer 不会占用全屏，而是显示安装的对话框；并且当应用目标 SDK 为 22 或以下时（没有适配运行时权限），系统会直接询问你要授予应用哪些权限。其他的一些隐私方面的改进还有：禁止应用获取无法重置的设备标识符，例如 IMEI ；隔离应用所使用的存储空间，避免应用随意读写内部存储的内容（Beta 1 中默认停用，因为会导致许多应用无法正常工作，我就没有去启用它）；禁止应用开关 Wi-Fi ；连接 Wi-Fi 时可以选择使用随机 MAC 地址（从 Android O 开始，扫描 Wi-Fi 时就会使用随机 MAC 地址了，可以避免“Wi-Fi 探针”的探测）等等。详细的可以参考 Privacy in Android Q 。然后说一些新功能。Wi-Fi 二维码分享，在重新设计的 Wi-Fi 详情界面中添加了分享按钮，验证指纹或锁屏密码后，系统会生成一个二维码用于分享 Wi-Fi 。同样的，连接 Wi-Fi 的添加网络的选项旁边也增加了一个扫描二维码的按钮，用于扫描别人分享的二维码。开发者选项中，也有一些新增的内容。其中 Game Driver Preference 里面可以配置应用所使用的图形驱动程序，因为我不怎么玩游戏，就没有测试，据说是可以提升游戏性能，让游戏更流畅，帧率更稳定。在开发者选项最下面，还增加了简单的主题选项，可以修改主题强调色，字体和图标形状。在这次的测试版中， Google 还专门内置了一个用于反馈的应用，方便用户报告问题，报告的问题会直接创建到 Issue Tracker 上。另外还有一些小的变更：通知向左划无法删除，而是只能打开通知选项，必须向右划才能删除；Pixel Launcher 对所有没有进行自适应图标适配的应用强制套上白色形状（就算应用有圆形图标也会被套上，App Shortcuts 的图标也会）；锁屏界面的暗色遮罩透明度更高，可以更好的欣赏锁屏背景。最后再说说我遇到的一些问题。首先是稳定性问题，这在预览版本中都算正常情况。这些天的使用中，我遇到了偶尔的性能下降，以及两次卡死重启，其中有一次是在卸载应用时，还有一次是使用中 System UI 无响应后卡死。另外还有一次我手动重启，因为出现了不明情况的发热，重启后恢复正常。然后是一些 Bug 。当多次清除同一类通知时，系统会询问是否要停止这类通知，选择选项后虽然通知被清除了，但是 Pixel Launcher 的通知圆点不会被清除，长按图标还能看到通知。从应用中返回桌面时，动画可能会直接闪过，就像是动画被禁用或是过渡时间非常短的样子。由于 Android Q 之后的版本将禁止后台启动 Activity ，当前的版本为了帮助开发者适配并保留兼容性，在…

Android 渐变切换应用主题
type: item
date: 2019-03-12T14:20:00+00:00
description: 我自己写的 IT之家 App 中使用的主题切换方式是直接重新创建 Activity ，但是这样就会有一个问题，切换主题时没有过渡效果，而且在 Android 9 上会闪一下。因为要重新创建 Activity ，就没办法在上面覆盖一个 View 做渐变动画；而一个一个给 View 使用动画又太麻烦了。然后我想到了通过另一个 Activity 的退出效果做动画的方案。不知道这个方案算不算好，不过至少达到了我预期的效果，而且实现起来也不复杂。这个方案的思路是先获取当前 Activity 的屏幕截图，然后在调用 recreate() 之前无动画启动过渡用的 Activity 并显示这张截图，最后以渐变的动画退出过渡 Activity 。先实现当前 Activity 截图的获取。val rootView = window.decorView.rootView if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // 在 Android O 和更高版本使用 PixelCopy 获取截图 // RGB_565 的视觉效果也可以，但是在 Android 9 上会导致 PixelCopy 失败 val bitmap = Bitmap.createBitmap(rootView.width, rootView.height, Bitmap.Config.ARGB_8888) val locationOfRootView = IntArray(2) rootView.getLocationInWindow(locationOfRootView) PixelCopy.request( window, Rect( // 截取的范围 locationOfRootView[0], locationOfRootView[1], locationOfRootView[0] + rootView.width, locationOfRootView[1] + rootView.height ), bitmap, { copyResult -> if (copyResult == PixelCopy.SUCCESS) { // 当 PixelCopy 结果成功 // 由于 Intent 传递限制数据量，暂时想到用静态变量 ThemeSwitchTransitionActivity.screenshot = bitmap startThemeSwitchTransition() } }, Handler() ) } else { // 在低版本系统中使用缓存获取截图 rootView.isDrawingCacheEnabled = true ThemeSwitchTransitionActivity.screenshot = Bitmap.createBitmap(rootView.drawingCache) rootView.isDrawingCacheEnabled = false startThemeSwitchTransition() } startThemeSwitchTransition() 方法中，重点是将当前 Activity 的状态栏和导航栏的样式 systemUiVisibility 进行传递，直接在过渡用 Activity 中设置，这样在过渡用的 Activity 中就不需要再判断当前应用使用的是什么主题来设置对应的样式。然后只需要在启动 Activity 时使用 overridePendingTransition() 设置为无动画效果就可以了。private fun startThemeSwitchTransition() { val intent = Intent(this, ThemeSwitchTransitionActivity::class.java).apply { putExtra(KEY_SYSTEM_UI_VISIBILITY, window.decorView.systemUiVisibility) } startActivity(intent) overridePendingTransition(0, 0) Handler().postDelayed({ // 设置一点延迟，避免闪烁 recreate() }, 50) } 接下来就是 ThemeSwitchTransitionActivity 的内容了，这里说几个需要注意的地方，完整代码可以看文末的链接。使用 WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS 来使 Window 扩展到整个屏幕，避免状态栏和导航栏占用空间。window.setFlags( WindowM…

荣耀畅玩 8C 简评
type: item
date: 2019-02-02T12:35:00+00:00
description: 前几天我妈单位发了和联通合作的新的合约机，荣耀畅玩 8C 。拿到之后我妈让我帮忙从旧手机（乐视 Le S3）转移数据，我就拿着玩了一会儿，然后发现这机器还是挺坑的，让我对华为本来就不好的印象又变差了。先说说配置吧，毕竟是千元机，也不能要求太高。高通骁龙 6324GB 内存 + 64GB 存储720p 凹口屏幕，分辨率 720*1520对，你没看错，8102 2018 年 10 月上市的手机竟然还在用 720p 屏幕。另外不支持 5GHz Wi-Fi ，也没有陀螺仪。软件方面，系统是基于 Android 8.1.0 的 EMUI 8.2.0 。开机后就收到系统更新，不过没有升级到 Android 9 ，不知道以后会不会提供升级。系统占用空间情况如下，不是 A/B 分区。默认预装了很多第三方应用，例如百度地图、淘宝、支付宝等，全都被我卸载了（有些需要用的因为不是新版，也卸载了）。对于华为自己的应用，有些可以卸载或停用，有些不能停用，但是很多都让我觉得非常恶心，因为大部分应用打开都要一大堆权限，并且说需要收集很多信息，比如音乐：你一个音乐，用设备标识符还不够？还要 MAC 地址，还要读取电子邮件附件，还要收集运动传感器信息？我用 adb shell 卸载掉了视频、音乐、华为应用市场等一大堆应用，然后安装了酷安 V7 共存版（这个版本作为应用商店使用还是很好用的）。卸载掉内置的没用的东西，然后就是安装应用，迁移一些数据。因为之前乐视的桌面实在是太蛋疼（两屏不能关闭的视频和新闻），我给那台手机也安装了 Nova Launcher 。正好我妈也用习惯了，我就往这台手机上也安装，然后就遇到了之前许多网友吐槽的情况：可是它默认就是华为桌面，我根本就没机会选别的。还好华为桌面有个抽屉模式，还算可以凑合用。性能方面，整机的运行速度还算不错吧，日常使用足够，玩游戏可能不太行。拍照我没怎么测试，不过可以确认一点，从取景器里看到的效果一点都不好，甚至有点糊，不知道和 720p 的屏幕有没有关系。外观方面，动画效果不是 Android 原生的效果，并且动画时长缩短了，我用着不是很习惯。另外 EMUI 的设计有点让人搞不懂，有种陈旧的感觉，和原生 Android 相比看起来一点也不现代化，可能是华为的设计师审美比较独特。默认字体看起来是方正兰亭黑，我个人认为很不适合手机屏幕显示的字体，感觉扁扁的。本想换成 Android 默认的思源黑体，但里面自带的 Android 字体却是 DroidSansFallback ，而且字体商城里也没有思源黑体，还有很多其他收费字体，不能选取自己下载的字体。其他的话，续航不错（应该和分辨率低有一些关系），三指下划截屏等都有，可以少安装一些第三方应用（不过我还是喜欢原生 Android）。有一个不是很好的地方，护眼模式（夜间调整色温）不支持根据日出/日落自动切换，而且颜色有点奇怪，我见过的大部分都是琥珀色，EMUI 这个看起来则是黄绿色，看着不太舒服。最后总结一下吧，硬件缩水严重，系统略丑，不能解锁。不玩游戏的话性能足够日常使用。在意隐私的用户就不要考虑了。相近价格不如买诺基亚，不过华为的质量还算可以。好久没更新文章了，这学期比较忙，而且也没什么好写的东西。快过年了，提前祝大家春节快乐吧。