您的位置:首页 > 移动开发 > Android开发

android系统开发中个人小问题汇总 (转)

2014-09-30 17:15 218 查看
from:http://blog.csdn.net/bmj/article/details/8649376

1,开机不停震动

手机开机,马达一直震动,应该是uboot正常启动后,没有设置震动关闭

解决:在震动200ms后关闭马达

u-boot/property/normal_mode.c

void normal_mode(void)

{

//MMU_Init(CONFIG_MMU_TABLE_ADDR);

vibrator_hw_init();

set_vibrator(1);

udelay(200*1000);

set_vibrator(0);

...

}

2,关机震动时间设置

frameworks/base/core/java/com/android/internal/app/ShutdownThread.java中

private static final int SHUTDOWN_VIBRATE_MS = 500; //默认震动0.5秒,修改这个参数

3,设置系统默认音量

修改文件:frameworks/base/media/java/android/media/AudioManager.java

public static final int[] DEFAULT_STREAM_VOLUME = new int[] {

4, // STREAM_VOICE_CALL

7, // STREAM_SYSTEM

5, // STREAM_RING

11, // STREAM_MUSIC

6, // STREAM_ALARM

5, // STREAM_NOTIFICATION

7, // STREAM_BLUETOOTH_SCO

11, // STREAM_FM

11, // STREAM_DTMF

11, // STREAM_TTS

7 // STREAM_SYSTEM_ENFORCED

};

根据需要进行修改即可。

注意:如果在3rdparty里面有同名文件最好一起修改。

4,如何调节音量档位

需要根据自己的情况来调整index to volume的算法。

相关实现的模块是 AudioPolicy。基类 AudioPolicyManagerBase 文件位于

framework/base/services/audioflinger/AudioPolicyManagerBase.cpp

实现类 AudioPolicyManagerALSA,位于

external/sprd/alsa/alsa_sound/AudioPolicyManagerALSA.cpp

函数 computeVolume:

这个方法平台目前没有用子类实现,所以走的是基类方法。如果客户需要修改,建议在子类中重载这

个方法。

再讲下基类方法:

1 通过 index 算出一个百分比;

2 通过这个百分比经过一个对数转换换成音量的百分比;

3 特殊情况的一些转换;

修改建议是子类的方法应该调用基类的方法并且做微调。

比如对 1,将 index 到百分比的对应关系略微修改。

比如对 3,可以把基类方法处理的结果在根据需要调整。

5,电池相关

若手机界面的电池进度条显示不够准确,请根据实际测试值调整kernel\drivers\ power\charge.c 的voltage_capacity_table表格中的值 15%对应的是低电告警电压,而0%是自动关机电压。

电池的报警电压调整:frameworks\base\core\res\res\values\config.xml,

config_lowBatteryWarningLevel:15----->百分比,可以动态调整该数值来调整低电电压。

过压保护的逻辑在:

Kernel\drivers\power\sprd_power.c里

charge_handler()函数中有个battery_data->over_voltage用于电压保护逻辑。

这个数值的来源是Kernel\arch\arm\mach-sc8810\include\mach\chg_drvapi.h

#define OVP_OVER_VOL 6500

6,修改系统默认时间:

修改\idh.code\kernel\drivers\rtc\ rtc-sprd.c

static int __init sprd_rtc_init(void)

{

......

sec_2011_to_1970 = mktime(2011, 1, 1, 0, 0, 0);

return 0;

}

mktime函数的参数即是修改点。

同时还要同步修改闹钟时间,否则闹钟会有问题。

packages\apps\DeskClock\src\com\android\deskclock\Alarms.java

private static void alarm_flag_setup(final long alarmTimeInMillis) {

Calendar c = Calendar.getInstance();

c.set(2011, 0, 1, 0, 0, 0);//注意这里月份是0代表1月

......

7,如何设置版本号

定义 android 版本号的地方在 build/tools/buildinfo.sh 内,可以修改此文件。

ro.build.display.id=$BUILD_DISPLAY_ID 改为 ro.build.display.id= $BUILD_D ISPLAY_ID_CUSTOM, 然 后 在customize/custom_cfg/proj_name/res/boardconfig.mk

下 定 义 宏BUILD_DISPLAY_ID_CUSTOM 就可以为自己的项目定义版本号.

显示硬件版本在设置->关于手机->硬件版本里看到:

packages/apps/Settings/res/xml/device_info_settings.xml

< Preference android:key="hardware_number"

style="?android:preferenceInformationStyle"

android:title="@string/hard_version"

android:summary="1.1.0"/>

8,无接近传感器,如何在开始通话后关闭屏幕

在 Phone 应用的 phoneApp 这个类中。找到下边这段代码:

mProximityWakeLock =

pm.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, LOG_TAG);

然后注释掉。这个是获取了接近传感器的 WakeLock。然后在 updatePokeLock 这个方法中。将

//pokeLockSetting |= LocalPowerManager.POKE_LOCK_MEDIUM_TIMEOUT;

改为

pokeLockSetting |= LocalPowerManager.POKE_LOCK_SHORT_TIMEOUT;

将updateWakeState 方法中

setScreenTimeout(ScreenTimeoutDuration.DEFAULT);

改为

setScreenTimeout(ScreenTimeoutDuration.SHORT);

这个是将默认延时时间设置为SHORT(5秒)。如果需要改为其他时间需要去改 setScreenTimeout

这个方法。

9,ms,mms,contact 容量限制

[适用版本]2.3.5

1.只要在容量允许的情况下,sms,mms 接收条数是没有限制的,但是每个会话的条数是有限

制的,默认情况下,每个会话的短信限存 200 条,彩信限存 20 条,但是能调整到 5000 条。

MmsConfig.java 代码中做了如下限制:

private static int mDefaultSMSMessagesPerThread = 200;// default value

private static int mMinMessageCountPerThread = 2; // default value

private static int mMaxMessageCountPerThread = 5000; // default value

private static int mDefaultMMSMessagesPerThread = 20; // default value

2.contact 的记录总数目前没有限制。

10,单摄像头进入时间较长如何解决

在customize/customer_cfg/project.../kernel/camera/camera_cfg.c中main_sensor_infor_tab和sub_sensor_infor_tab里会放很多sensor的结构体;camera启动初始化时,底层驱动会匹配相关的菜单,删除没有的sensor,能加快启动

11,客户定制开/关机铃声

开机:替换 3rdparty/anim/poweranim/special/bin/startupsound

关机:替换 3rdparty/anim/poweranim/special/bin/shutdownsound

注:这里的startupsound/shutdownsound可以是mp3或者ogg格式的,替换时不需要扩展名

12,背光亮度,静音等默认值修改

修改\frameworks\base\packages\SettingsProvider\res\values\defaults.xml中的默认值即可。

13,浏览器如何修改内置的“搜索引擎”

修改packages\apps\browser\res\values\donoottranslate-search_engines,xml文件,中

“search_engines”的string-arry中的item项即可。如下事例为内置了 139/百度/google 三个搜索引

擎。

<item>search139</item>

< item>baidu</item>

< /string-array>

< item>google</item>

< string-array name="search_engines" translatable="false">

注意:如果支持多种语言,其他文件下的同名文件donoottranslate-search_engines,xml也需要

修改。

14,关机充电动画修改

关机充电动画的资源路径是:

external/sprd/charge/res/images/(展讯平台)

将这个目录下的 png 图片文件修改客户需要的文件就可以了。

15,如何设置默认动态壁纸

找到 /frameworks/base/core/res/res/values/config.xml 文件中

<string name="default_wallpaper_component">@null</string>

为设置默认壁纸的代码如若想要更换成为动态壁纸。只需将“@null”更改为动态壁纸的路径即可,例如:将默认壁纸更改为“线性光幕效果”的动态壁纸,则更改成如下代码:

< string name="default_wallpaper_component">com.android.wallpaper/com.android.wallpaper.nexus.NexusWallpaper</string>

com.android.wallpaper 在 AndroidManifest 文件中的 packagename

com.android.wallpaper.nexus.NexusWallpaper 在 AndroidManifest 文件中的 service name

需要注意的是:静态的图片壁纸和 live wallpaper 是两个系统,加载的时候是完全两套机制,静态图片

通过 launcher 里面的一个 xml 文件配置来管理系统默认静态壁纸,live wallpaper 则是通过 intent 机制向系统搜寻所有匹配 Activity,所以,这里的默认值为 null,而不是那个系统默认静态壁纸的地址,系统是读 config.xml 文件的设置,若为 null 才继续查找静态壁纸配置内容. 没有效果的话,恢复下出厂设置即可。

16,如何设置系统默认壁纸

如果只需要修改动态壁纸,替换 frameworks/base/core/res/res/drawable/default_wallpaper.jpg即可,或者在源码中修改对应 default_wallpaper地址。

17,关机菜单中如何添加重启选项

/frameworks/base/policy/src/com/android/internal/policy/impl/GlobalActions.java" 文件添加如下修改部分即可:

mItems = Lists.newArrayList(

// silent mode

mSilentModeToggle,

// next: airplane mode

mAirplaneModeOn,

new SinglePressAction(

com.android.internal.R.drawable.ic_lock_power_off,

R.string.global_action_power_off) {

public void onPress() {

// shutdown by making sure radio and power are handled accordingly.

ShutdownThread.shutdown(mContext, true);

}

public boolean showDuringKeyguard() {

return true;

}

public boolean showBeforeProvisioning() {

return true;

}

},

// add for reboot

new SinglePressAction(

com.android.internal.R.drawable.ic_lock_power_off, //替换成相应的图

R.string.global_action_power_off) { //替换成相应的提示文字

public void onPress() {

ShutdownThread.reboot(mContext, null, true);

}

public boolean showDuringKeyguard() {

return true;

}

public boolean showBeforeProvisioning() {

return true;

}

});

//end add

18 如何修改系统默认输入法

下面将以“谷歌拼音输入法”为例,进行解释和说明。

第一步 修改/frameworks/base/packages/SettingsProvider/res/values/defaults.xml 添加如下代码:

< string name="config_default_input_method"

translatable="false">com.android.inputmethod.pinyin/.PinyinIME</string>

com.android.inputmethod.pinyin 在 AndroidManifest 文件中的 packagename

.PinyinIME 在 AndroidManifest 文件中的service name

第二步:修改

/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

在 private void loadSecureSettings(SQLiteDatabase db) 方法中,添加如下代码:

loadStringSetting( stmt, Settings.Secure.DEFAULT_INPUT_METHOD,

R.string.config_default_input_method );

19,如何在桌面预置应用程序图标

桌面预制的图标:是在 launcher2 的 default_workspace.xml中配置的,文件路径:

Launcher2\res\xml\default_workspace.xml

20,添加搜索引擎

以添加139搜索引擎为例

a) 在packages/apps/Browser/res/values/all_search_engines.xml

< string-array name="search139" translatable="false">

< item>139</item>

< item></item>

< item>http://s.139.com/favicon.ico</item>

< item>http://s.139.com/search.do?q={searchTerms}&category=downloadable|web|browseable&tid=2123,2124,2125,2126&fr=portalcustom2</item>

< item>UTF-8</item>

< item></item>

< /string-array>

这6个<item>从上到下依次表示显示标签,关键字,搜索图标,搜索引擎地址,编码方式,搜索提示地址。

b) 在packages/apps/Browser/res/values/donottranslate-search_engines.xml

< resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">

< string-array name="search_engines" translatable="false">

< item>search139</item>

< item>baidu</item>

< item>google</item>

< item>yahoo</item>

< item>bing</item>

< /string-array>

< /resources>

在这边将139搜索引擎添加进来。

这边添加的搜索引擎是将1中的添加的搜索引擎变成设置中选择搜索引擎的选项。

21,修改 idle 界面搜索引擎的链接地址

packages/apps/quicksearchbox/res/values/strings.xml 下修改:

www.google.com为www.google.com.hk

22,linux下ADB安装后增加设备权限:

/etc/udev/rules.d/51-Android.rules

SUBSYSTEM=="usb", SYSFS{"huawei"}=="12d1", MODE="0666" //华为设备号

SUBSYSTEM=="usb", SYSFS{"Samsung"}=="04e8", MODE="0666" //三星设备号

23,Touchevent中,返回值是 true ,则说明消耗掉了这个事件,返回值是 false ,则没有消耗掉,会继续传递下去。

在 View 中跟 Touch 相关的事件有 dispatchTouchEvent , interceptTouchEvnet , onTouchEvent 三种。 dispatchTouchEvent 是负责分发事件的,事件从 activity 传递出来之后,最先到达的就是最顶层 view 的 dispatchTouchEvent ,然后它进行分发,如果返回 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事件,如果 interceptTouchEvent
返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理,如果 interceptTouchEvent 返回 false ,那么就传递给子 view ,由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。

如果事件传递到某一层的子 view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个 view 往上传递,都是 onTouchEvent 来接收。而如果传递到最上面的 onTouchEvent 也返回 false 的话,这个事件就会“消失”,而且接收不到下一次事件。(一次事件指的是 down 到 up 之间的一系列事件)


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