2021年12月

问题现象

  • 未插耳机右上角有耳机图标
  • 设置内调节 mediacall volume 没有声音输出,但是拉动其他 ringalarm 有声音输出;确定音源文件也是有的。

原因

可以了解设置内的每个音量条的策略都是不一样的,ringalarm 都是默认强制从喇叭输出,但是 media 的插入耳机后则是由耳机输出,因此就出现以上问题了。

解决方法

所以该问题的实际原因就是不插耳机出现耳机图标的问题,只要让正常情况下使用扬声器输出,而不是耳机输出即可。

kernel/msm-4.9/arch/arm64/boot/dts/qcom/sq808-evk/qm215-audio.dtsi

qcom,msm-mbhc-hphl-swh = <1>;
qcom,msm-mbhc-gnd-swh = <0>;

packages/apps/Settings/res/values-zh-rCN/arrays.xml

@@ -37,6 +37,7 @@
     <item msgid="2693197579676214668">"5 分钟"</item>
     <item msgid="1955784331962974678">"10 分钟"</item>
     <item msgid="5578717731965793584">"30 分钟"</item>
+    <item msgid="1781492122915870416">"永不休眠"</item>
   </string-array>
   <string-array name="dream_timeout_entries">
     <item msgid="1999412608953538363">"永不"</item>

packages/apps/Settings/res/values/arrays.xml

@@ -48,6 +48,7 @@
         <item>5 minutes</item>
         <item>10 minutes</item>
         <item>30 minutes</item>
+        <item>Never</item>
     </string-array>

     <!-- Do not translate. -->
@@ -66,6 +67,8 @@
         <item>600000</item>
         <!-- Do not translate. -->
         <item>1800000</item>
+        <!-- Do not translate. -->
+        <item>2147483647</item>
     </string-array>

     <!-- Display settings.  The delay in inactivity before the dream is shown. These are shown in a list dialog. -->

packages/apps/Settings/src/com/android/settings/display/TimeoutPreferenceController.java

@@ -85,8 +85,10 @@ public class TimeoutPreferenceController extends AbstractPreferenceController im
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
         try {
-            int value = Integer.parseInt((String) newValue);
-            Settings.System.putInt(mContext.getContentResolver(), SCREEN_OFF_TIMEOUT, value);
+            //+Begin mantis-66494 Modified for never goto sleep by james.zheng 2020-12-24
+            long value = Integer.parseInt((String) newValue);
+            Settings.System.putLong(mContext.getContentResolver(), SCREEN_OFF_TIMEOUT, value);
+            //-End mantis-66494 Modified for never goto sleep by james.zheng 2020-12-24
             updateTimeoutPreferenceDescription((TimeoutListPreference) preference, value);
         } catch (NumberFormatException e) {
             Log.e(TAG, "could not persist screen timeout setting", e);
@@ -120,9 +122,15 @@ public class TimeoutPreferenceController extends AbstractPreferenceController im
         } else {
             final CharSequence timeoutDescription = getTimeoutDescription(
                     currentTimeout, entries, values);
+            //+Begin mantis-66494 Modified for never goto sleep by james.zheng 2020-12-24
+            if(currentTimeout == 2147483647){
+                summary = timeoutDescription.toString();
+            } else {
+            //-End mantis-66494 Modified for never goto sleep by james.zheng 2020-12-24
             summary = timeoutDescription == null
                     ? ""
                     : mContext.getString(R.string.screen_timeout_summary, timeoutDescription);
+            }
         }
         preference.setSummary(summary);
     }

准备好开机 logo 的 png 图片。

最好是同分辨率的图片,否则可能背景色会变为白色。

制作 splash.img

  1. 把 png 放到 device/qcom/common/display/logo 里面。
  2. python ./logo_gen.py logo_xyz.png 生成 splash.img

烧录 开机 logo

  1. adb root
  2. adb reboot bootloader
  3. fastboot flash splash .\splash.img
  4. fastboot reboot

参考:

https://blog.csdn.net/u014296677/article/details/78423137
https://blog.csdn.net/csdnxialei/article/details/87461635
https://blog.csdn.net/qq_27061049/article/details/117752715
https://blog.csdn.net/yandongqiangZHRJ/article/details/8585273
https://www.cnblogs.com/zzb-Dream-90Time/p/7403098.html

引脚定义

接口 公头 母座 作用
1 DCD DCD 载波检测
2 RXD TXD 终端 -> 计算机
3 TXD RXD 计算机 -> 终端
4 DTR DTR 数据终端准备好
5 GND GND 信号地线
6 DSR DSR 数据准备好
7 RTS RTS 请求发送
8 CTS CTS 清楚发送
9 RI RI 振铃指示

数据传输方向

公头:

  • RXD: 终端 -> 计算机
  • TXD: 计算机 -> 终端

参考:

https://blog.csdn.net/zhenguo26/article/details/84064573

RS232 RS485 串口 电平标准
https://blog.csdn.net/lijiuyangzilsc/article/details/48599745

什么是RS232电平?什么是TTL电平?
https://www.jianshu.com/p/a942e8090e01

DB9串口线定义的解析
https://zhuanlan.zhihu.com/p/361011144

安装 ffmpeg

  1. sudo apt-get update
  2. sudo apt install ffmpeg

检查视频

使用 ffplay xyz.mp4 看下视频能不能播放。 使用 ffmpeg -i xyz.mp4 查看视频长宽等信息。

参考: https://www.cnblogs.com/renhui/p/8458802.html

转换视频角度

ffmpeg -i pc-v.mp4 -vf "transpose=1" ./out.mp4 可以让视频旋转 90度。

参考: ffmpeg实现视频的翻转与旋转(ffmpeg4.2.2)
https://www.cnblogs.com/architectforest/p/12818543.html

转换视频分辨率

ffmpeg -i out.mp4 -vf scale=720:1280 out_1.mp4 让视频分辨率转换为 720 x 1280.

参考: ffmpeg 命令行改变视频分辨率
https://www.cnblogs.com/nanqiang/p/12103307.html
ffmpeg-修改分辨率
https://blog.csdn.net/weixin_38556197/article/details/108594866
ffmpeg修改视频文件的分辨率
https://www.cnblogs.com/lcxiao/p/11509132.html

把视频转换为图片集

ffmpeg -i ../out_1.mp4 -r 30 -f image2 %05d.jpg 把视频转换为 5位数字序号的图片集。

参考: ffmpeg将视频转换成图片
https://blog.csdn.net/lxx4610/article/details/107813385
ffmpeg将mp4视频转换成多张jpg图片
https://blog.csdn.net/danmeng8068/article/details/96430660
ffmpeg批量将视频转为单帧图片shell脚本
https://zhuanlan.zhihu.com/p/31637663

转自: https://blog.csdn.net/vagrant2005/article/details/6561795

Ubuntu 终端下默认的编辑器为 nano。比如输入命令“crontab -e”就会打开 nano。不过我们在学会使用 Vim 以后可能就不愿意在使用 nano 了。那么怎么才能直接就调用 Vim 编辑器来编辑呢?只需要修改一个配置我们就可以做到。操作步骤如下:

内容来自Linuxren.net

  打开一个终端,在其中输入如下命令: copyright Linuxren.net

    $ sudo update-alternatives –config editor copyright Linuxren.net

  然后在返回的对话中选择第 4 项 vim.basic 。或者还可以直接执行这个命令: 内容来自Linuxren.net

    echo export EDITOR=/usr/bin/vim >> ~/.bashrc
内容来自Linuxren.net

  来实现我们的需求。 本文来自Linuxren.net

转自: https://blog.csdn.net/qq_37858386/article/details/103834675

Android APP:检测实体按键事件

一、检测点击按键事件一般不对手机上的输入按键进行处理,直接由系统按照默认情况操作。

当然有时为了改善用户体验,需要让应用拦截按键事件,并进行额外处理。 要想监控按键事件,首先得知道每个按键的编码,这样才能根据不同的编码值进行相应的处理。监听器OnKeyListener只会检测控制键,不会检测文本键。实际测试发现HOME、SWICH、POWER普通的app是接收不到事件的,这几个事件在framew里面处理了。

二、部分控制键KEYCODE

三、测试代码

1、android_studio_app\keyeventdemo\app\src\main\java\com\example\keyeventdemo\MainActivity.java

    package com.example.keyeventdemo;

    import android.os.Bundle;
    import android.os.Handler;
    import android.support.v7.app.AppCompatActivity;
    import android.view.KeyEvent;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.TextView;
    public class MainActivity extends AppCompatActivity {
        private TextView key_result;
        private String desc = "";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            key_result = (TextView) findViewById(R.id.key_result);
        }
      @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            key_result = (TextView) findViewById(R.id.key_result);
        }

       @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            desc = String.format("%sphysical key coce is %d", desc, keyCode);
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                desc = String.format("%s, KEYCODE_BACK", desc);
            } else if (keyCode == KeyEvent.KEYCODE_MENU) {
                desc = String.format("%s, KEYCODE_MENU", desc);
            } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
                desc = String.format("%s, KEYCODE_VOLUME_UP", desc);
            } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
                desc = String.format("%s, KEYCODE_VOLUME_DOWN", desc);
            }else  {
                desc = String.format("%s, KEYCODE_VOLUME is unknown", desc);
            }
            desc = desc + "\n";
            key_result.setText(desc);
            //返回true表示不再响应系统动作,返回false表示继续响应系统动作
            return true;
          // return  false;
        }
    }

2、布局文件 activity_main.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="5dp">

        <TextView
            android:id="@+id/tv_hard"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:gravity="center"
            android:text="please press the physics button"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/key_result"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="16sp" />

    </LinearLayout>

- 阅读剩余部分 -

永久关闭SELinux
https://zhuanlan.zhihu.com/p/336648934

android+关闭selinux权限问题,记录Android开发中SELINUX权限问题-Go语言中文社区
https://blog.csdn.net/weixin_39600704/article/details/117757795

Android程序报错: 权限问题java.io.FileNotFoundException: ……:open failed: EACCES (Permission denied)
https://blog.csdn.net/tm_6666/article/details/106792314?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-2.highlightwordscore&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-2.highlightwordscore

操作sys/device下文件节点的三种方法
https://blog.csdn.net/tanliyin/article/details/72723229?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-9.highlightwordscore&spm=1001.2101.3001.4242.6

读取设备节点/sys/class/XX :Android java.io.FileNotFoundException: open failed: EACCES (Permission denied)
https://blog.csdn.net/wds1181977/article/details/54967110

充电指示灯控制中SELinux权限问题
https://blog.csdn.net/mickeymousemei123/article/details/99828287

LED节点访问增加selinux权限记录
https://blog.csdn.net/wangwei6227/article/details/86648876

Selinux SeAndroid理解
https://blog.csdn.net/bsxiaomage/article/details/51126826

SELinux权限问题解决方法
https://blog.csdn.net/w2064004678/article/details/105515244/

记录Android开发中SELINUX权限问题
https://blog.csdn.net/maowendi/article/details/105564908

android:sharedUserId="android.uid.system" 的使用
https://blog.csdn.net/m0_38094058/article/details/82628731

关于android:sharedUserId="android.uid.system" 的使用
https://blog.csdn.net/MYBOYER/article/details/104902159

selinux常见neverallow项解决方法与常用命令
https://blog.csdn.net/k663514387/article/details/107983037

Android P系统编译报错SELinux违反Neverallow
https://blog.csdn.net/Sunxiaolin2016/article/details/91435362

[Android Framework]Android 11 SELinux avc权限解决方法
http://www.zyiz.net/tech/detail-259152.html

Android SELiunx 权限添加
https://blog.51cto.com/u_15127678/2800306

深刻理解SELinux SEAndroid
https://www.shangmayuan.com/a/d7ccd609100e479fad0952d6.html

Neverallow failures occurred Error while expanding policy in AOSP10
https://discuss.96boards.org/t/neverallow-failures-occurred-error-while-expanding-policy-in-aosp10/9712

Need some Guide with a Android SELinux Build Error
https://stackoverflow.com/questions/58956629/need-some-guide-with-a-android-selinux-build-error

SELINUX安全访问机制,配置
https://www.codenong.com/cs110875925/

【Android笔记】Android应用层读取驱动设备节点
https://www.jianshu.com/p/e4a8549a903c

selinux 问题集锦
https://blog.csdn.net/chenpuo/article/details/116456987

linux sysfs文件系统(三)属性文件读写原理分析
https://blog.csdn.net/oqqYuJi12345678/article/details/101849978

Android 上层应用读写设备节点
https://blog.csdn.net/huhuayouxu/article/details/53783799?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242.1

Android app如何正确读写系统sys设备节点
https://blog.csdn.net/u014341735/article/details/51244258

Selinux机制介绍与添加流程
https://blog.csdn.net/hjlgs/article/details/98958141
android 开发串口中遇到的权限问题 (个人笔记)
https://blog.csdn.net/only_you_zj/article/details/80098192 Android串口设备热插拔,ttyACM、ttyUSB权限修改
https://blog.csdn.net/u013595260/article/details/119496169
android _5.1 _串口权限
https://blog.csdn.net/izhetu/article/details/52311450
Android 串口相关权限问题
https://blog.csdn.net/qq_39734379/article/details/80525389
android读写串口的权限问题
https://blog.csdn.net/dddxxxx/article/details/53635966

深入理解SELinux SEAndroid(第一部分)
https://blog.csdn.net/innost/article/details/19299937
SELinux/SEAndroid 实例简述(一) 基础概念
https://blog.csdn.net/shell812/article/details/54930027
SELinux/SEAndroid 实例简述(二) TE语言规则
https://blog.csdn.net/shell812/article/details/54930246
SELinux/SEAndroid 实例简述(三)实例看SELinux/SEAndroid
https://blog.csdn.net/shell812/article/details/58596377
【selinux】selinux加prop,hal层读取
https://blog.csdn.net/qq_38091632/article/details/113831585