Android 9.0 Settings增加OTG开关

首先我们先定义好中文和英文的字符串资源

路径:vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values/strings.xml

<string name="accessibility_otg_switch_title">"OTG Switch"</string>

路径:vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values-zh-rCN/strings.xml

 <string name="accessibility_otg_switch_title" msgid="8480105032417444275">"OTG 开关"</string>

在设置-无障碍的菜单中增加我们定义的SwitchPreference

路径:vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml/accessibility_settings.xml

        <SwitchPreference
                android:key="toggle_otg_preference"
                android:title="@string/accessibility_otg_switch_title"
                android:persistent="false"/>

接着我们找到无障碍xml所对应的Java文件

路径:vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/accessibility/AccessibilitySettings.java

需要导入的包
import android.support.v14.preference.SwitchPreference;
import android.util.Log;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

private static final String TOGGLE_OTG_PREFERENCE =
"toggle_otg_preference";  //定义key
    
private SwitchPreference mOtgPreference;   //声明控件


//在 initializeAllPreferences 方法中绑定控件 并设置默认状态 设置监听
    private void initializeAllPreferences() {
//绑定控件 默认关闭 设置监听 此方法中 private void initializeAllPreferences() 
mOtgPreference = (SwitchPreference) findPreference(TOGGLE_OTG_PREFERENCE);
mOtgPreference.setChecked(false);
mOtgPreference.setOnPreferenceChangeListener(this);
}


//在重写的 onPreferenceChange 监听刚才的控件
    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {

//...以上省略
//设置监听内容 onPreferenceChange
else if (mOtgPreference == preference) {
                    Log.d("soda water",String.valueOf((Boolean)newValue));
            controlBrightness((Boolean)newValue);
            return true;
        }
}

//FileWriter中的字符串就是节点的具体路径可根据项目而定
//建立字节流向节点写入数据
private void controlBrightness(Boolean commod) {
    BufferedWriter bufWriter;
    try {
        bufWriter = new BufferedWriter(new FileWriter("sys/switch_mode/otg_en_switch"));
        bufWriter.write(commod?"1":"0");
        bufWriter.close();
    } catch (IOException e) {
        Log.e("soda water", " ***controlRedBrightness ERROR*** Here is what I know:" + e.getMessage());
        e.printStackTrace();
    }
}

写完上面这些我们目前还不能对节点进行控制因为Android有selinux的原因 我们需要加上对应节点所需的权限

定义类型

路径:device/xxx/common/sepolicy/non_plat/file.te

type freeme_custom_otg, file_type, data_file_type, core_data_file_type, mlstrustedobject;

绑定节点

路径:device/xxx/common/sepolicy/non_plat/file_contexts

#otg switch
sys/switch_mode/otg_en_switch u:object_r:freeme_custom_otg:s0

查看avc报什么权限以及类型 adb shell -> su -> logcat | grep avc

路径:device/xxx/common/sepolicy/non_plat/system_app.te

allow system_app freeme_custom_otg:file { read write open ioctl getattr setattr };

给节点权限 读写执行

路径:device/xxx/em50lgo81_custom_e25/init.project.rc

chmod 777 /sys/switch_mode/otg_en_switch

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不太正常的移动开发工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值