您的位置:首页 > 产品设计 > UI/UE

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

2016-05-13 12:02 639 查看
近来手头的活儿比较杂乱,在此做一个整体的总结,包含一些平台(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 里添加

view
sourceprint?

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


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

view
sourceprint?

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 打上下面的补丁:

view
sourceprint?

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.
}


先到此吧,未完待续。

view
sourceprint?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  apn 3g fonts android Framework