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 状态栏上不想要的图标，我就想到了以前 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 call_strength sensors_off screen_record这个列表对于 Pixel 和基于 AOSP 的一些第三方 ROM 应该都是可用的。对于厂商定制的 ROM，可能还有其他的图标，要看那些图标对应的名字和设置值为空时系统预设的默认值，应该只能通过反编译系统提取的文件来查看了。已经 2023 年了，先祝大家新年快乐。好长时间没有更新文章了（更新服务器的软件也算更新博客吧），去年也没有写 Android 预览版的体验，因为太懒了。今年如果 Android 14 的变化比较大的话，我应该会写一写吧。下半年应该要换手机了，不然就不能继续用最新版的 Android 了。希望 Google 可以给 Pixel 系列提供更长时间的系统升级，而不是只延长安全更新的期限。现在三星都提供四年系统升级了，Google 更应该延长时间，起到带头作用啊。
不知不觉又是一年，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 移除了最近任务界面下方的搜索栏和应用建议。说实话，我觉得在最近任务下方显示可能是更好的方案，这样更方便在常用应用中切换。移除了搜索栏和应用建议，取而代之的是截屏和选择按钮。点按截图按钮就可以对当前应用截图，但是不含状态栏和导航栏内容。选择按钮则是直接高亮所有的可选取的文字和图像，直接长按内容仍然可以触发选取。截图中还有一个分享按钮，是测试版时候的，后来取消了分享按钮，只留下了前两个，并且改为了横向（图标在左文字在右）的布局。分享按钮就是直接分享当前应用的截图而不保存。说实话我感觉挺方便的，因为有时候确实只是想分享一次，并不需要保存。还有一个很棒的功能就是媒体控件。应用在播放媒体时，快捷设置下方会显示媒体控件，方便快速进行操作。如果有多个媒体应用在运行，则可以左右滑动切换控件。控件右上显示的是当前输出音频的设备，点按可以快速切换。这里也有一个不太好的地方，为了给媒体控件让位置，快捷设置展开后变成了两行。即使没有启用媒体控件或当前没有这类应用在运行，也不会变为之前的三行。这对于添加了较多快捷设置瓷块的用户还是有一些不方便。系统的分享菜单相比之前更加精简。分享菜单下面的完整列表，不会再对同一个应用显示多个项目，而是点按这个应用时，会显示所有这个应用支持的操作。可惜的是，Google 仍然没有解决分享菜单加载的问题。如果操作速度很快，还是可能会触发其他项目而不是点按的项目。最后，Emoji 更新。添加了一些新的，并改了一下旧的样式。再提一句系统整体的体验吧，在 Pixel 3a 这个硬件上还是非常流畅的。虽然最近有媒体说 Android 11 更新让性能下降了，但是我平时用着没有什么感觉（我不用手机玩游戏，也没有什么太大型的应用），在有些地方甚至感觉比之前更加流畅。说实话，作为一个普通用户，能感知的变化并不多，不过这样也好，省去了学习成本。文章可能确实没什么实质内容，就作为给自己的一个记录吧。因为太懒，鸽了这么久才把文章写完，以后要改改这个毛病了。
今年夏季国内疫情基本上控制住了的时候，我就开始打算出门玩一圈。天天呆在城市里，也会想接触一下大自然，于是就联系朋友商量这件事。本来是打算去青海湖的（因为看到了这个视频），但是突如其来的一波疫情反弹，让我们的这个计划直接取消了。最终和朋友确定了到一个离得比较近的地方，焦作云台山。虽然定下来了，但是那段时间天天阴天雷雨，根本不适合外出游玩，只好慢慢等晴天，最终终于等到了 8 月 25 日的晴天（从天气预报来看）。老实说天气还是有点靠运气的，虽然预报天气是多云转晴，但是看夜间天气是有几率下雨的，并且 24 日傍晚还下了一场阵雨。看完天气预报，和朋友简单商量了一下，决定第二天直接出发，不再等了。事实证明我们的选择没错。第二天早上，风轻云淡，天气非常好，而且也不是很热。因为这边车站直达的车次取消了，所以我们计划的是转车前往景区。到车站会合后，正打算买票的时候，听到在售票厅外面招揽乘客的“黑车”有人问去不去云台山。我们问了一下价格，正好，而且是直接送到，省去了转车浪费的时间（如果乘坐非直达景区的大巴车，一般中间还有停站，也会浪费时间），于是直接坐了这趟车到景区。到达景区后，我们直接在线订票，然后刷身份证进入景区。可能因为是难得的晴天，游客非常多，等了十几分钟才坐上从游客中心进入景区的观光巴士（门票包含景区内交通，进入景区后，观光巴士和公交可以随意乘坐，无需再验票）。观光巴士的体验还是不错的的，有空调，座位上有安全带。公交车好像是因为旅游旺季观光巴士不太够而从焦作市里临时调过来用的，就是标准公交车配置，没有安全带，也没有空调，是电动的。为了之后更省心，也可以少带一些东西（不然背太多东西就没法放开玩了），我们在景区内最大的服务区下车（岸上服务区，正好晚上的“云台山电音节”就在这边的停车场附近举办），先寻找住处。刚到岸上服务区，换乘站旁边就有一个附近酒店来拉客的人。我们问了一下价格，感觉挺合适（三人间 100 元/天，有空调、Wi-Fi、电视），就同意跟着去看看。房间很大，没有装修（就是简单的白墙），很干净。我顺便上房顶看了一眼，虽然只有两层楼，但是从房顶看出去感觉很舒服，而且离夜市那边比较远，晚上不会太吵闹，也不会有太多灯光。定下了住处，时间已经接近中午了。我们简单吃了一些带的东西，就到换乘站，准备前往第一个景点——红石峡。根据观光巴士上面的广播，这是云台山的核心景点（好像很多地方都有叫红石峡的景点）。大约十分钟的时间，车就到了红石峡。从路边的入口进入，需要走一段时间才能到达红石峡中部。景点内游客非常多（刚才车站几乎所有人都下车了），一开始还好，过了一会儿就非常难受，跟火车站排队的感觉差不多，队伍在狭窄的游览步道上慢慢前行。中途会经过一个山洞，很窄而且平均高度只有 1.75 米。身高高一些的话在很多地方都需要低头。洞内 RGB 灯效感觉有点阴间，我感觉可能用弱一些的白光更舒服。过了山洞，仍然是很长一段在崖壁上的步道。沿着步道继续走，高度降低，慢慢往红石峡底部前进。这里已经是比较低的地方了，又离水很近，所以逐渐凉快起来。途中还可以看到几个小瀑布，我觉得一般般，没什么看头（主要还是体验山水自然嘛），不过按照游览图上来看，每个瀑布都有名字。快到底部的时候，有个岔路不让游客进入，我推测是近期下雨比较多，下面可能被水淹了。再走没多久，就到了红石峡景点的最后。这里是比较大的一个区域，在一块非常大的石头上面，有很多人在这里拍照休息。我们在这里休息了大概半小时，就从旁边的出口往上走了。往上走了一段时间，到了一段平整的道路，不用上下阶梯，感觉轻松许多。这段路上面搭着架子，架子上挂满了假花，应该是因为这段路两边没有山崖也没有比较高的树木，太晒了，所以人工制造一些凉荫。走过这段路就算游览完了红石峡，来到子房湖水坝。子房湖据说是因汉代张良（字子房）而得名。大坝上面的一侧是很多卖小吃和纪念品的。子房湖这边也就是看看而已，我们没有玩水上游乐项目。走过大坝就是景区观光巴士换乘站了。这个换乘站可以前往茱萸峰和小寨沟。按照计划，我们坐车前往小寨沟。小寨沟主要由三个景点组成，泉瀑峡，潭瀑峡和猕猴谷。从景点入口进去后离景点还有一段距离，是一个大广场，一侧是小寨沟景点的水上游乐项目，另一侧是休息区和美食城。因为猕猴谷离得最近，我们决定先去猕猴谷。在猕猴谷入口的路牌旁边休息一会让之后，我们继续前进。路上没什么景色，走到里面猕猴观赏区也没见到猴子。观看猕猴表演的凉亭周围聚满了人，然而并没有猴子（感觉好坑）。停了一小下，我们决定直接从出口道路离开。往出口道路走的时候看到工作人员牵着两只猴子，应该是要进行猕猴表演。不过我们没有看，直接就离开了。另外，景区里有好几处挂有牌子，提醒游客小心猴子出没，但是在这些地方我们都没见到猴子。从猕猴谷出来后，就感觉真的很累，而且因为和想象中差距有点大，感觉有点失望。我们在路边的凉亭又休息了一段时间，喝了点水，吃了点东西。随后前往下一个景点，潭瀑峡。刚走到潭瀑峡入口处，我朋友看到牌子上写着全长 2200 米，而且面前就是一段台阶，直接不想走了。商量了一下之后我们直接去了泉瀑峡。亚洲单级落差最高的瀑布——云台天瀑，就在泉瀑峡。泉瀑峡也是很长一段路，不过看起来不需要上下很多台阶，应该会比较轻松一些。而且这边可以坐景区的电瓶车，直接跳过一段没有什么景色可看的路程，那当然是直接坐车了。其实按照我原本的打算，是肯定不会坐这种车的，但是我们实在是太累了，一电路都不想走了。这段路只有一公里，车费往返 10 元，送一张（上面写的是）20 元的咖啡券，可以到美食城那边的的咖啡馆兑换一杯咖啡。泉瀑峡一路上给人的感觉都很凉爽舒适，可以看到很多小瀑布和水潭，而且上方崖壁有很多树木，不会一直被太阳暴晒。泉瀑峡的尽头就是“云台天瀑”了。由于近期雨水较多，瀑布的水比较大，远看就像水雾一团一团的从山上落下，比较壮观。游览路线是先从较低的地方经过，是一个水潭。水潭上面的石板桥两侧没有栏杆，但是有很多人在这里拍照，感觉有点危险。经过水潭，就到了出口的岔路。继续往前走有一个平台，名为观瀑台。虽然没有下面来的刺激，但是这里确实是拍照比较好的地方。原先应该是可以更靠近瀑布的，但是那边的路被封了。我感觉也是因为持续降水导致瀑布水流太大，为了安全而修改了路线。返程的前半段就是在山上走，左侧可以听到水流声，但因为树木茂密，看不到下面的水。后半段和来时的路就是一样的了，只是通过栏杆隔开了左侧和右侧，避免拥挤。回到景点入口的大广场，我们去了咖啡厅。送的咖啡是半杯多一点的纯咖啡，只有苦味。我问了一下店员有没有糖，得到答复没有，可能是送的就没有吧（感觉像是是故意坑人的...）。另外还有一碟零食，山药片，以及一个特别小纸杯的“山药咖啡”。山药咖啡倒是很甜。因为送的咖啡卡丢了一张，我们只拿到两杯咖啡，另一个朋友直接去了旁边的德克士。我们两个人喝完咖啡，到德克士旁边的餐馆吃了牛肉茄汁面。吃完饭，我们就从出口坐车回岸上服务区了。回到服务区，天基本上已经黑了，也差不多到了电音节开始的时间。因为实在是太累了，我们就先回到宾馆休息，到晚上快 9 点才去电音节。去电音节的路上经过了岸上服务区的夜市（算是夜市吧，虽然白天也都是一样的店在营业，照片见下面第二天晚上），有点后悔在小寨沟景点吃饭，应该回来这边再吃饭。电音节门票 30 元，感觉有点不划算。实际上里面没什么可看的，就是一个舞台，然后请了一些乐队来而已。我们看的时候登场的也不是什么知名乐队（也有可能只是我不知道），不过在前排的人还是很 high 的。除了舞台和前面的很大的霓虹灯 Logo，另一边全都是卖小吃的。我们没有买小吃，站在后排看了一会儿，就回去了。回到宾馆，我拿着三脚架上去宾馆的房顶，想要试试 Google 相机的天体摄影模式。山区的夜晚才是真的夜晚，几乎伸手不见五指，抬头用肉眼即可看到很多星星。周围是宾馆和当地居民居住的区域，有一些灯光，对于观看星空略微有些影响，但还是比城市里好太多。不过灯光似乎有些影响手机的拍摄效果，我试了几次，拍到三张看起来还不错的照片。拍照后，我发现 Google 相册有个“Astro”滤镜，应用后效果还不错。不过似乎只有手机端有（Android， iOS 未知），网页版没有。下图是应用“Astro”滤镜后的效果。拍完星空，回到房间，我休息了一会儿，就洗漱睡觉了。我第二天早上快到 7 点的时候醒来。虽然房间的窗口并不是面向山的，但是从窗外看出去令人感觉非常舒适。起床坐了一会儿后，我们出去吃饭。吃饭的地方就是晚上夜市那边。中午和晚上卖烧烤、烩面的店，早上几乎全部改成了包子、油条、胡辣汤等。许多店里都是爆满的，看人数估计都得排队十分钟以上。我们找了一家人不是太多的，价格还可以但是吃起来就非常一般了。吃完早饭，我们就前往茱萸峰景点。按照计划，我们去乘坐凤凰岭索道，然后体验玻璃栈道，再前往茱萸峰（这几个属于同一个景点）。凤凰岭索道前面排队的人很多，购票后排队排了十几分钟才坐上缆车。票价 70 元（返程 65 元，往返 130 元），全程只有十分钟左右的时间，我感觉速度算是比较快的了。索道直接到达凤凰岭，省去了从茱萸峰景点入口往这边走的一段路（将近 3 公里）。玻璃栈道是单独售票的，要 20 元，既然来了还是看看吧。实际上也确实很无聊，就是走了一圈而已，不过风景还算不错。我们本来以为玻璃栈道可以直接走到茱萸峰登山地点附近，没想到是绕了一圈回到了索道回程入口的下方。在这边找了一块比较凉快的地方，我们坐下来吃了点东西，休息一会儿。接下来就是这次游玩最坑人的地方了。我们正在往茱萸峰登山线路走的时候，听到旁边跟团游的游客在说茱萸峰不能上了，大家看微信群。到这里我朋友打开微博，看到云台山官方微博在 9 点 10 分发了一则公告，说茱萸峰上面例行安全检查，关闭一天。当然对于我们这样自由行的游客来说，问题不是很大，可以第二天再来，可是很多一日游和跟团的游客就没办法了。中途前往茱萸峰的登山线路关闭了，我们只好沿着下面的路一路走到茱萸峰景点门口。这一路还好，没有什么台阶，但是有一段连续的下坡，走起来比较累。到景点门口，我们直接坐车返回服务区。返回途中会经过叠彩洞景点，是连续的 U 形转弯的山洞，一共有十几个。这里从照片上来看很好看（宣传册和游客中心看到的照片，航拍），但实际上只能坐车经过，并不能从外面上方观看，就没什么意思了。回到服务区，我们休息了一会儿，吃了饭，然后直接睡觉了。醒来的时候已经是下午将近 4 点了，快速商量后我们决定去昨天没有去的潭瀑峡（此时浑身酸痛，完全不想动，但是最后还是去了）。又到了潭瀑峡入口的立牌，又看到前面的台阶。我们休息了片刻便继续前进。往前走了没多远，就没什么很多上下的台阶了，就是沿着各种水潭和小瀑布前行的道路。此时我们有点后悔前一天没有来这里，顺便吐槽了一下猕猴谷。潭瀑峡里面没有什么特别的景点，只是一直沿着瀑布流水逆流而上，而且上方的树木比较茂密，非常凉爽。走到尽头，是一个大一些的瀑布，不过比起来泉瀑峡的“云台天瀑”还是差远了。好处是这一程虽然不算近，但不是特别累，而且随时都有景色可以看。中途还有一个“不老泉”，很多人在这接水喝。我用手捧着喝了一口，感觉和我们买的“凉白开”水味道差不多，但是非常冰凉，没敢多喝。不过看这边专门支起来的竹架子，好像是专门给游客接水喝的样子...游览完泉瀑峡，小寨沟景点算是全部游览完了。我们在广场附近的人工草坪上休息了一会儿，买了几根烤肠，就坐车返回服务区了。这天晚上我们在服务区夜市吃饭。夜市看起来实在是繁华，尽管只有一条街。我们从开头走到最后，看看都有哪些好吃的东西。除了两三个超市和一些卖纪念品的，其他几乎都是饭店。有火锅、烧烤等等，最后面还有一片空地，是各种小摊的聚集地。最后又来到开头的这家河南烩面店里，吃了羊肉串和烩面。吃完饭，我们直接返回住处休息了。第三天一早，我们在酒店收拾了一下房间，拿走行李，退房。然后去吃了第二天早上因为人太多没吃到的那家胡辣汤，买了点水，坐车前往茱萸峰。不乘坐凤凰岭索道的话，需要在子房湖换乘站换乘。换乘站前面排队的人非常多，我们大概排了十几分钟才坐上车。将近半小时的车程后，我们又一次来到了茱萸峰登山步道的入口处。大概是前一天很多人来茱萸峰没有登山，再加上今天新来的游客，一大早人就非常多。登山过程基本上就是无限的上台阶，很累，也比较无聊。中间可以经过几个休息的地方，停下来歇歇脚。必须要说一句的是，有些人的素质实在是差。乱扔垃圾就不说了，还有些人不在中途设置的吸烟室内吸烟。山林里因为防火要求，很多游览道路旁都有牌子提醒游客不要吸烟，可就是有人不听，甚至还有人就站在吸烟室外面吸烟。登山途中会经过“憩停”，其实也算是一个休息点。休息的人太多了，根本没有空座位让我们休息，我们站着歇了一会儿就继续登山了。另外，这里有个岔路可以前往凤凰岭索道。前面经过一段比较平稳的路之后，就迎来了断断续续的台阶。走完这段路，可以到“药王洞”，据说是孙思邈在这一带长期采药、炼丹、行医所居住的地方。药王洞门口有一棵几百年历史的红豆杉。现在药王洞里面前半部分是上香的地方，设置有功德箱（功德箱上面都是扫码支付...），后半部分是空的。由于里面禁止拍摄，我进去里面转了一圈就出来了。最里面没有安装照明设施，就是一个石洞，略微潮湿，说实话没什么看头。经过了药王洞，有一块“永远禁止赌博碑”。再往后，登山的路就变得越来越陡峭了。经过这一段路，可以来到关帝庙，可以上香，买纪念品以及刻着名字的锁。这里有一个平台，可以休息。中间的树，周围的栏杆上面挂的全都是“爱情亲情友情锁”之类的东西。我们在这里休息了一会儿。再往上，就是最后一段路了，走上去就到达了茱萸峰峰顶。玄帝宫就位于峰顶。建筑内部不允许拍照，是上香祈福的地方。另外这里可以捐赠，捐赠达到 100 元就可以在石牌上刻名字。这里有几面墙上全都是刻满了名字的石牌。左右两侧可以看到标记测绘高度的纪念碑，和写着“云台之巅”的石碑。我们在这里转了一圈便返回了。返回时候发现原先专门下山的出口没有开放，只能原路返回，去不了另一边的观景台。往下走一直到憩亭才走了出口分岔路（实际上就是分流用的，最终都是到达景点大门）。回到景点大门，我们坐车返回了服务区。我们在这里的最后一顿饭，是岸上服务区的德克士。店里后面空间很大，价格比市区的门店略微贵一点点，可以接受。吃完饭，我们便乘坐观光巴士，回到游客中心，结束了这次三天的旅程。最后感谢你能看完我的这篇水文（或是直接拉到底部）。这篇文章断断续续的写了好多天才写完，而现在我又在考虑国庆假期去哪玩了。还是非常想去青海湖，或者额济纳（按照网上的介绍的文章，肉眼可见银河），或是一些其他的距离比较远的，能看到不同景色的地方。不过要出远门最快可能也到明年了，不是很想在国庆假期高峰期去那么远的地方，而且天冷了去有些地方感觉可能受不了啊。
此文章并非游戏测评，只是记录下自己的游玩过程和感想这个“爬山”游戏（不会还有人不知道吧）早在 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 面通关就行了，后面不是给人玩的。本身好像是正能量的游戏能给我这么难受的感觉，也是没谁了。至于打算喷的人也就别喷了，我就是菜，玩不起这么牛逼的游戏。哦对了，第六章整个直接摔下山，后面强行每一关的元素重新玩一遍，真的能把人气死。补充，前面写的时候想到那个云就越想越气，可能说的有些过分。但是不想改了，就这样吧。
还是先跨年吧，祝大家 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 目前仅支持英语，效果还算可以。录音机的实时转换文字功能也是仅支持英语，不过它还可以识别语音，音乐，甚至敲门声这样的声音，录音保存后，可以搜索这些关键词快速找到对应的声音片段，非常方便。最后再说一句相机。Google 相机大家肯定都知道，DxOMark 的评分也有了，没什么好详细说的。前置相机也支持 HDR+ 和人像模式。新版相机还支持天体摄影（Astrophotography），切换到 Night Sight 模式后会自动检测当前条件是否可以启用，需要使用三脚架保持稳定才可以启用（使用 Camera PX 这个修改版可以强制启用）。相机的处理速度还是挺快的，感觉比 Pixel 1 上还要快一些，出片效果对我来说已经非常好了。使用情况按照我的使用情况，两天充电一次完全没有问题。而且在 12 月更新之后，内存占用情况要更好一些，可以同时开更多应用放在后台，很少出现后台被杀掉的情况。但是在使用 Google 相机的时候，HDR+ 处理阶段占用内存较多，会导致部分后台缓存的应用被杀。日常使用中，几乎不会遇到任何卡顿的情况（我没有安装国产流氓应用）。存储芯片是 eMMC，但是体验还算可以。大多数应用都可以流畅运行，只有 Twitter 官方客户端有点微妙，有时候列表会卡顿，有时候则很流畅，可能是优化不到位。最后说说缺点。没有防水，不过这个对我来说无所谓。存储是 eMMC，国产 2000 多价位的手机早就上 UFS 存储了，还在用 eMMC 显得有点不够意思。存储只有 64GB 一个选项，对有些需要更大空间的用户就没法选择了。相机调教的不错，但是有些本不需要硬件支持的功能，也不会下放给前代产品，算是 Google 的传统（似乎其他厂商也都一样）。Google 自家的一些应用还有 bug，最明显的就是 Google Assistant，在查看历史时候多次出现卡死的情况（不会导致系统卡死）。另外价格还是略高，Pixel 系列都这样，没什么性价比。说实话不怎么会写测评，真的想不出来还有什么可以写的。如果对于这台设备有什么疑问，欢迎各位在评论里提出。最后的最后，再次祝大家 2020 新年快乐。
写这篇的时候，距离 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 的回复 #11 来看，十月的更新中应该是没希望修复了。拖了这么久终于把这篇文章写了。说没时间，其实还是懒。最近晚上一直在追番/补番，完全不想干别的... 接下来就等 10 月 15 日的 Made by Google 2019 发布会了。
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 ，当前的版本为了帮助开发者适配并保留兼容性，在出现后台启动的情况时系统会显示一个 Toast （在前面的部分截图可见，我自己写的一个可以通过快捷设置瓷块截图的 App）。在通过 TileService 启动 Activity 时也会出现这个 Toast ，我认为这是一个 bug ，因为 TileService 中启动 Activity 本身就是这样的，不应该被拦截。就先说这么多吧，有些东西一时想不起来了。以后的关于 Android Q Beta 的内容我也会加入到这篇文章中，感兴趣的可以收藏一下。
我自己写的 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( WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS ) 还原之前的 systemUiVisibility 。window.decorView.systemUiVisibility = intent.getIntExtra(KEY_SYSTEM_UI_VISIBILITY, 0) 在结束 Activity 时，设置渐变的退出动画（我直接使用了系统自带的淡出动画）。Handler().postDelayed({ // 设置一点延迟避免闪烁，实际测试不影响体验 finish() overridePendingTransition(0, android.R.anim.fade_out) }, 100) 避免用户按下返回键影响动画效果。override fun onBackPressed() { } 避免屏幕旋转影响效果，在 Manifest 中为这个 Activity 加上属性 android:screenOrientation="locked" 。<activity android:name=".ui.activity.ThemeSwitchTransitionActivity" android:screenOrientation="locked" android:theme="@style/Theme.MaterialComponents.NoActionBar" /> 另外，没必要使用单独的布局 XML ，只需要一个 ImageView 即可。val imageView = ImageView(this) imageView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) setContentView(imageView) 最终效果演示如下（MP4 ，大小 217.8KB），完整代码可以见 MainActivity.kt 和 ThemeSwitchTransitionActivity.kt。您的浏览器不支持 video 标签，请换个浏览器试试
前几天我妈单位发了和联通合作的新的合约机，荣耀畅玩 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 这个看起来则是黄绿色，看着不太舒服。最后总结一下吧，硬件缩水严重，系统略丑，不能解锁。不玩游戏的话性能足够日常使用。在意隐私的用户就不要考虑了。相近价格不如买诺基亚，不过华为的质量还算可以。好久没更新文章了，这学期比较忙，而且也没什么好写的东西。快过年了，提前祝大家春节快乐吧。