Android工作杂项总结(APN,3G,i2c,SystemUI等)

近来手头的活儿比较杂乱,在此做一个整体的总结,包含一些平台(MTK)相关的小技巧之类的东东。

软件平台:Android4.4.2

硬件平台:MTK6572


1) 系统开机默认关闭数据流量开关

第一步,修改project配置文件中相关项:

-MTK_DEFAULT_DATA_OFF=no
+MTK_DEFAULT_DATA_OFF=yes

第二部,修改Telephone模块:

--- a/mediatek/frameworks/base/telephony/java/com/mediatek/telephony/DefaultDataSimSettings.java
+++ b/mediatek/frameworks/base/telephony/java/com/mediatek/telephony/DefaultDataSimSettings.java
@@ -107,7 +107,8 @@ public class DefaultDataSimSettings {
}
} else {
    if (oldGprsDefaultSIM == Settings.System.DEFAULT_SIM_NOT_SET) {
        - boolean enabled = true;
       + boolean enabled = false;
       connectivityManager.setMobileDataEnabled(enabled);
       logd("non-gemini, default on: " + enabled + ", for DEFAULT_SIM_NOT_SET");
}


2)添加运营商的特定apn(Access Point Name)默认支持

Android自带的内部APN配置文件

frameworks/base/core/res/res/xml/apns.xml文件内容:

<!-- If you edit this version, also edit the version in the partner-supplied
apns-conf.xml configuration file -->
<apns version="8">

</apns>

该文件被编译到res.apk中,通过Android的资源管理器进行访问。

第三方也有相关的配置文件mediatek/frameworks/base/telephony/etc/apns-conf.xml,该文件被copy至out下的system/etc 目录,打包至system.img中。

APN配置加载

android通过telephony.db数据库中的 carriers表来保存所有的APN配置信息
packages/providers/TelephonyProvider/src/com/android/providers/telephony/TelephonyProvider.java文件中的内部类DatabaseHelper用于创建telephony.db数据库。

APN配置信息加载分为两部分,首先从Android自带的内部APN配置文件中读取配置信息,然后在读取第三方提供的APN配置文件信息。

从APN信息加载源码中可以知道,第三方提供的APN配置信息版本必须与内部APN配置信息的版本相同。自此APN配置信息就存储在carriers表中了,并且通过TelephonyProvider向外提供访问接口。

具体到MTK平台,就是修改第三方那个apns-conf.xml,按照相关语法添加要兼容的apn。


3)调试i2c设备工具

    在将i2c调试工具放置系统中之后,执行会提示Error: Could not open file `/dev/i2c-0' or `/dev/i2c/0': No such file or directory ,这时候需要打开配置文件,这样才能在/dev下打开i2c控制器的接口。
    对于mtk系统,需要在mediatek/config/mt6572/autoconfig/kconfig/platform增加CONFIG_I2C_CHARDEV=y,然后重新编译之后就可以了。


4)修改fonts默认类型

Font配置文件

    位于frameworks/base/data/fonts

    system_fonts.xml  fallback_fonts.xml

文件结构

    <family>

        <nameset>

            <name>sans-serif</name>

            <name>arial</name>

            <name>helvetica</name>

            <name>tahoma</name>

            <name>verdana</name>

        </nameset>

        <fileset>

            <file>Roboto-Regular.ttf</file>

            <file>Roboto-Bold.ttf</file>

            <file>Roboto-Italic.ttf</file>

            <file>Roboto-BoldItalic.ttf</file>

        </fileset>

    </family>

可以称每一个 family为一个字体族。 包括:正常字体,粗体,斜体,粗体斜体,每个家族包括四种字体,这四种字体不是都必须的。

loadSystemFontsLocked->initSystemFontsLocked

loadFontInfoLocked解析 system_fonts.xmlfallback_fonts.xml,保存到gSystemFonts。

    getFontFamilies

        从/system/etc/system_fonts.xml读取字体信息,并加载字体信息,保存到 SkTDArray<FontFamily*> fontFamilies;

        然后遍历 fontFamilies,将数据保存到gSystemFonts。

    gDefaultNames保存里第一个<family>标签里的<nameset>。

    SkNEW_ARGS:创建每种字体FileTypeface

    addTypefaceLocked:把创建的字体保存到gFamilyHead链表,gFamilyHead每个节点保存了一个字体family,包含常规、粗体、斜体、粗斜体4种类型。

    gdefaultFamily 保存里第一个<family>标签里的字体。

    gdefaultNormal 默认字库normal类型


5) 状态栏添加耳机图标

一>、 在frameworks/base/packages/SystemUI/res/values/strings.xml 里添加

1. <string name="headset_enabled">Headset Enabled.</string

二>、 在fameworks/base/core/res/res/values/config.xml 里相应位置添加:

1. @@ -45,6 +45,7 @@
2. <item><xliff:g id="id">alarm_clock</xliff:g></item>
3. <item><xliff:g id="id">secure</xliff:g></item>
4. <item><xliff:g id="id">clock</xliff:g></item>
5. +       <item><xliff:g id="id">headset</xliff:g></item>
6. </string-array>

上面带+号的行为添加的

三>、 frameworks/base/packages/SystemUI/res/drawable-xhdpi 或者你手机对应的分辨率的文件夹下添加stat_sys_headset.png和stat_sys_headset_mic.png

两个图片, 分别表示不带mic的耳机和带mic的耳机, 这两个图标将在状态栏显示, 图片可以自己找,也可以从fameworks/base/core/res/res/drawable-xhdpi里面提取现成的

四>、 在frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java 打上下面的补丁:


01. --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
02. +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
03. @@ -103,6 +103,9 @@ public class PhoneStatusBarPolicy {
04. else if (action.equals(TtyIntent.TTY_ENABLED_CHANGE_ACTION)) {
05. updateTTY(intent);
06. }
07. +            else if (action.equals(Intent.ACTION_HEADSET_PLUG)) {
08. +                updateHeadset(intent);
09. +            }
10. }
11. };
12.  
13. @@ -119,6 +122,7 @@ public class PhoneStatusBarPolicy {
14. filter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);
15. filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
16. filter.addAction(TtyIntent.TTY_ENABLED_CHANGE_ACTION);
17. +        filter.addAction(Intent.ACTION_HEADSET_PLUG);
18. mContext.registerReceiver(mIntentReceiver, filter, null, mHandler);
19.  
20. int numPhones = MSimTelephonyManager.getDefault().getPhoneCount();
21. @@ -276,4 +280,29 @@ public class PhoneStatusBarPolicy {
22. mService.setIconVisibility("tty"false);
23. }
24. }
25. +
26. +    private final void updateHeadset(Intent intent) {
27. +        final String action = intent.getAction();
28. +        final int state = intent.getIntExtra("state"4);
29. +        final int mic = intent.getIntExtra("microphone"4);
30. +
31. +        switch (state) {
32. +        case 0:
33. +            try{
34. +                mService.setIconVisibility("headset"false);
35. +            } catch (Exception e) {
36. +                //Log.i("StatusBar Headset", "frist time to run");
37. +                }
38. +        break;
39. +        case 1:
40. +            if (mic == 1)
41. +                mService.setIcon("headset", R.drawable.stat_sys_headset_mic, 0,
42. +                    mContext.getResources().getString(R.string.headset_enabled));
43. +            else
44. +                mService.setIcon("headset", R.drawable.stat_sys_headset, 0,
45. +                    mContext.getResources().getString(R.string.headset_enabled));
46. +            mService.setIconVisibility("headset"true);
47. +        break;
48. +        }
49. +    }
50. }


先到此吧,未完待续。











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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值