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)默认支持
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中。
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?
二>、 在fameworks/base/core/res/res/values/config.xml 里相应位置添加:
view
sourceprint?
上面带+号的行为添加的
三>、 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?
先到此吧,未完待续。
view
sourceprint?
软件平台: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?
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories