14921
安卓修改GPS定位、时区、语言、设备名称、时间、快速开关机、分区、蓝牙、壁纸、时间格式
一:修改默认GPS关闭
gps 默认是打开的,有些产品需要默认关闭,主要是为了省电。 修改: /frameworks/base/packages/settingsProvider/res/values/defaults.xml 将: <stringname="def_location_providers_allowed"tanslatable="false">gps</string> 改为: <stringname="def_location_providers_allowed"tanslatable="false"></string> 二.修改系统默认时区及默认语言 &nBSP; build/tools/buildinfo.sh在这个文件的最后一行的前面添加以下代码: echo"persist.sys.language=zh" echo"persist.sys.country=CN" echo"persist.sys.localevar=" echo"persist.sys.timezone=Asia/Shanghai" echo"ro.product.locale.language=zh" echo"ro.product.locale.region=CN" 三.修改设备默认名字 build/tools/buildinfo.sh 在这个文件里面修改 四.修改系统默认时间 android 如何修改出厂默认日期和默认时区 时间信息预设信息都是0, 在rtc 初试化 时候设置的. 由于RTC 基本上不会断电,所以它的初试化只做一次,即使重新download bin 档. 用FlashTool 执行Format, 再执行download (不要用format -->download button), 或者RTC断电一段时间,就可以观察到日期恢复到出厂值。 修改默认日期: 修改文件 \alps\mediatek\custom\[project]\preloader\ inc\cust_rtc.h \alps\mediatek\custom\[project]\kernel\rtc\rtc\rtc-mt65XX.h #define RTC_DEFAULT_YEA 2013 #define RTC_DEFAULT_MTH 1 #define RTC_DEFAULT_DOM 1 修改后的表现可通过Setting菜单->时间日期设置): //http://blog.csdn.net/sergeycao ; 五.修改系统默认快速开机打开 现在只有HTC和MTK的手机具有快速开机功能 frameworks/base/packages/SettingsProvider/res/values下的defaults.xml文件如下: <!-- Default for iposettings --> <!--将true改为false--> <!--<bool name="def_ipo_setting">true</bool>--> <boolname="def_ipo_setting">false</bool> </resources> 六:分区修改 分区修改: A 修改分区文件mediatek\build\tools\ptgen\partition_table.xls B 修改分区头文件mediatek\custom\project\common\partition_define.h 七:蓝牙修改 蓝牙信息: 修改frameworks/base/core/jni/android_Bluetooth_common.h 中的BTMTK_ANDROID_DEFAULT_LOCAL_NAME 定义 八:默认壁纸 1.默认壁纸 frameworks\base\core\res\res\drawable\default_wallpaper.jpg 2.动态壁纸 frameworks\base\core\res\res\values\config.xml <stringname="default_wallpaper_component">com.android.package/.classname</string> 3. 锁屏壁纸 mediatek/source/frameworks/banyan/res/res 九: 修改默认时间显示24小时制式 1. 修改文件alps\frameworks\base\packages\SettingsProvider\res\values\defaults.xml 增加代码<string name="time_12_24" translatable="false">24</string> 红色标记表示24小时制,也可以改为12(12小时制) 2. 修改文件 alps\frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.Java 找到函数loadSystemsettings (),在函数中增加以下语句: loadStringSetting(stmt, Settings.system.TIME_12_24, R.string.time_12_24); 另:代码中时根据各国的当地的习惯设置默认值的,具体各国各地的参考文件为:external\icu4c\data\locales,中文参考zh.txt文件中的DateTimePatterns,但是我改了没有效果。上面的方案修改后则会所有国家和地区默认的时间格式都为24小时制了。 十:GPRS流量默认打开 开机自动默认打开gprs数据流,很多应用都需要自动开启这个,可以直接改 单卡: frameworks\base\services\java\com\android\server\ConnectivityService.java getMobilEDAtaenabled函数中的 Settings.Secure.MOBILE_DATA 默认值由1改为0,其实有个更好的办法是去设置一下Settings.Secure.MOBILE_DATA的默认值为0,但改这里暂时也能用了。 public boolean getMobileDataEnabled() { enforceAccessPermission(); boolean retVal = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.MOBILE_DATA, 0) == 1; if (DBG) Slog.d(TAG, "getMobileDataEnabled returning " + retVal); return retVal; } 双卡: alps\frameworks\base\telephony\java\com\android\internal\telephony\PhoneProxy.java文件的 在类public class PhoneProxy extends Handler implements Phone 中 直接修改 private boolean mGPRSOn = true; 默认true 十一:修改USB调试模式打开 修改DefaultActivity.java 在onCreate里面加入下面这句话即可在user模式默认开启usb调试 Settings.Secure.putInt(getContentResolver(),Settings.Secure.adb_ENABLED, 1); 十二:Android来电铃声默认设置的实现方法与添加语音来电铃声 1:、Android来电铃声默认设置的实现方法 Andoird默认来电铃声的设置方法为修改build/target/product/core.mk的ro.config.ringtone的值如 ro.config.ringtone=Backroad.ogg,该音乐文件必须于framework/base/data/sounds/Android.mk中加入音乐文件。 framework/base/media/java/android/media/MediaScanner.java中类的初始化时会设置默认铃声的文件名的变量mDefaultRingtoneFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX + Setting.System.RINGTONE); MediaScanner该类会搜索音乐文件必插入数据库中,搜索过程中检查是否与设置的默认铃声相同,如果相同则设为默认铃声。 } else if (ringtones && mWasEmptyPrioRTOScan && !mDefaultRingtoneSet) { if (TextUtils.isEmpty(mDefaultRingtoneFilename) || doesPathHaveFilename(entry.mPath, mDefaultRingtoneFilename)) { setSettingIfNotSet(Settings.System.RINGTONE, tableUri, rowId); setprofileSettings(audioProfileManager.TYPE_RINGTONE, tableUri, rowId); mDefaultRingtoneSet = true; } } 2、如何设置语音来电的默认铃声 首先在core.mk中新增ro.config.videocall=BentleyDubs.ogg。 在framework/base/media/java/android/media/MediaScanner.java类中新加两个成员变量 private boolean mDefaultVideoCallSet; private String mDefaultVideoCallFilename; 在setDefaultRingtoneFileNames()方法中加入以下代码初始化默认铃声的文件名 mDefaultVideoCallFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX + Settings.System.VIDEO_CALL); 在endFile()方法中加入以下代码设置语音来电的默认铃声 } else if (ringtones && mWasEmptyPriorToScan && !mDefaultVideoCallSet) { if (TextUtils.isEmpty(mDefaultVideoCallFilename) || doesPathHaveFilename(entry.mPath, mDefaultVideoCallFilename)) { setSettingIfNotSet(Settings.System.VIDEO_CALL, tableUri, rowId); setProfileSettings(AudioProfileManager.TYPE_VIDEO_CALL, tableUri, rowId); mDefaultVideoCallSet = true; } } 如果要添加ogg铃声文件 添加完文件之后 直接添加路径就行了 修改framework/base/data/sounds/Android.mk文件 添加路径 十三: android源码中修改(出厂)默认输入法 方法一: android源码中系统首次加载各种设置的默认值是在 /android_code/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java 这个类中 loadSettings(...)--> loadSystemSettings(db) 和 loadSecureSettings(db); 我们发现其中没有加入默认输入法的设置 我们可以自行在loadSecureSettings(db) 函数中加入 对应的设置代码. 首先在 defaults.xml中添加 : <stringname="def_input_method" translatable="false">com.android.LationIME/.LatinIME (这个是输入法的id)</string> 然后在 loadSecureSettings(db)中添加 : loadStringSetting(stmt,Settings.Secure.DEFAULT_INPUT_METHOD, R.string.def_input_method); 这样系统的默认输入法就设置完成了~ 方法二: 修改文件如下: frameworks\base\core\res\res\values\config.xml frameworks\base\services\java\com\android\server \InputMethodManagerService.java 在frameworks\base\core\res\res\values\config.xml 添加一个属性: [java] view plaincopy 1. <string name="config_default_input_method" translatable="false"> 2. com.android.inputmethod.pinyin/.PinyinIME</string> frameworks\base\services\java\com\android\server\InputMethodManagerService.java 的方法buildInputMethodListLocked() 里添加: [java] view plaincopy 1. String defaultIme = Settings.Secure.getString(mContext 2. .getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD); 3. 4. if ( defaultIme == null ) 5. { 6. final Resources res = mContext.getResources(); 7. try 8. { 9. //frameworks\base\core\res\res\values\config.xml 10. String myIME = res.getString( com.android.internal.R.string.config_default_input_method ); 11. if ( myIME != null && myIME.length() > 0 ) 12. { 13. Settings.Secure.putString( mContext.getContentResolver(), 14. Settings.Secure.DEFAULT_INPUT_METHOD, 15. myIME ); 16. } 17. } 18. catch ( Exception e ) 19. { 20. } 21. } 要注意的是导入第三方输入法的so文件路径(以操作第三方的touch input 输入法为例) /out/target/product/generic/system/lib/libimezi.so,拷贝一份存到/out/target/product/generic/symbols/system/lib/libimezi.so重新编译即可 下面是在第三方中调用开源的so文件教程 如何在Android NDK中调用第三方库文件(.so) 1.在project/jni目录下创建prebuilt子目录(目录名可自定义). 2.将第三方.so放到prebuilt中,并创建Android.mk, 内容如下: LOCAL_PATH :=$(call my-dir) include$(CLEAR_VARS) LOCAL_MODULE:= xxx LOCAL_SRC_FILES := libxxx.so include$(PREBUILT_SHARED_LIBRARY) 3.在project/jni/Android.mk中加入 LOCAL_SHARED_LIBRARIES := xxx 4.在project/jni/android.mk的最后加入 include$(LOCAL_PATH)/prebuilt/Android.mk 5.运行cygwin, 到project目录下, 运行$NDK/ndk-build 十四:修改默认语言 根据网上的资料有两种方式, 1、在PRODUCT_LOCALES字段里,将要选择的语言放在第一位,如: PRODUCT_LOCALES := en_US zh_CN 默认语言是英语; 2、在persist.sys.language和persist.sys.country 里指定语言,如下: PRODUCT_PROPERTY_OVERRIDES := / persist.sys.language=zh / persist.sys.country=CN build.prop文件的处理是在system/core/init/property_service.c。 第一种方式1 实现,这样比较简单,但是我在工程里面找了2~3天都没找着 PRODUCT_LOCALES 环境变量在什么地方,最后在 build/target/product/SDK.mk 里面找到了这个变量,然后修改里面的 PRODUCT_LOCALES 变量 PRODUCT_LOCALES := / en_US / zh_CN / zh_TW 编译,并烧录文件,发现系统语言版本还是没变化。再认真查看里面的文件, 发现 # Overrides PRODUCT_BRAND := generic PRODUCT_NAME := sdk PRODUCT_device := generic 这里的 NAME 和编译的时候设置的 NAME 不一致,猜测估计是没有用到这里的 环境变量。 ============================================ PLATFORM_version_CODENAME=REL PLATFORM_VERSION=2.1-update1 TARGET_PRODUCT=ut6410 TARGET_BUILD_VARIant=eng TARGET_SIMULATOR=false TARGET_BUILD_TYPE=release TARGET_ARCH=arm HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=ECLAIR ============================================ 现在继续查找 PRODUCT_LOCALES 还是没有找到,实在不行了,我查看 build/target/product/core.mk 发现 PRODUCT_BRAND := PRODUCT_NAME := PRODUCT_DEVICE := 咋这几项都没写呢?灵光一闪,是不是这个和 PRODUCT_NAME 没关系呢?? 我试着把 PRODUCT_LOCALES := / en_US / zh_CN / zh_TW 添加到这里,重新编译,烧录发现成功了 我的这里跟贴主是不同的我的有东西 正在实验我的是不是能用 代码如下 PRODUCT_BRAND := generic PRODUCT_NAME := generic PRODUCT_DEVICE := core 下面的方法是比较好的建议采用 调整Android默认语言 默认语言的选择实现是在build/core/MAKEfile里,从PRODUCT_LOCALES里选择第一个语言作为默认语言,如下: define default-locale $(subst _, , $(firstword $(1))) endef # Selects the first locale in the listgiven as the argument # and returns the language (or the region) define default-locale-language $(word 2, 2, $(call default-locale, $(1))) endef define default-locale-region $(word 3, 3, $(call default-locale, $(1))) Endef ... PRODUCT_DEFAULT_LANGUAGE="$(calldefault-locale-language,$(PRODUCT_LOCALES))" \ PRODUCT_DEFAULT_REGION="$(calldefault-locale-region,$(PRODUCT_LOCALES))" \ 然后通过build/tool/buildinfo.sh文件将如下段写到文件build.prop,如下: echo"ro.product.locale.language=$PRODUCT_DEFAULT_LANGUAGE" echo"ro.product.locale.region=$PRODUCT_DEFAULT_REGION" 所以,要改变默认语言用下面两种方法中的一种就行了: 1 、在PRODUCT_LOCALES字段里,将要选择的语言放在第一位,如: PRODUCT_LOCALES := en_US zh_CN 默认语言是英语 2、在persist.sys.language和persist.sys.country 里指定语言,如下: PRODUCT_PROPERTY_OVERRIDES := \ persist.sys.language=zh \ persist.sys.country=CN build.prop文件的处理是在system/core/init/property_service.c。 再就是还有一个方法:在/frameworks/base/core/jni/AndroidRuntime.cpp 在AndroidRuntime.cpp 里的readLocale函数里面,把en 与 US 修改成 zh 与 CN 十五:Android字体设置与app字体设置 1: 修改系统默认字体大小 Android系统中在Settings->display->Font Size下面可以设置系统字体大小,默认的系统字体大小为Normal,如果想修改这个默认值,可以在下面这个文件中进行修改: 在alps/frameworks/base/core/java/android/content/res/Configuration.java文件中如下 public void setToDefaults() 这个方法中进行修改, 如果默认要改成特大字体,请改为1.15f,然后重新build framework.jar这个模块即可; public void setToDefaults() { fontScale = 1.15f; //normal value is 1 mcc = mnc = 0; 注意:Settings中系统的字体大小,在/packages/apps/Settings/res/values/arrays.xml文件中的 ”entryvalues_font_size”这个tag中分别有定义对应的数值, Small:0.9 Normal:1.0 Large:1.1 Extra Large:1.15 所以如果要修改默认值,直接在上面那个方法中修改fontScale 为对应的数值即可(注意带上f,表示为float类型) 2:替换Android默认的汉字字体 在android系统中,DroidSans是默认字体,只包含西方字符,应用程序默认情况下都会调用它,而DroidSansFallback包含了东亚字符,当需要显示的字符在DroidSans字体中不存在(如:汉字)时,即没有对应编码的字符时,系统会到DroidSansFallback中去找相应编码的字符,如果找到,则使用DroidSansFallback字体来显示它,如果仍找不到该编码对应的字符,则无法在屏幕上显示该字符。更换默认中文字体的步骤为: 1)将幼圆字体库youyuan.ttf重命名为DroidSansFallback.ttf,覆盖Android源码中frameworks/base/data/fonts目录下的DroidSansFallback.ttf文件; 2)重新编译Android系统; 3)编译SDK。生成的SDK中,android默认的中文字体已更换为幼圆字体。该方法的不足是删除了Android系统原来的中文字体。 为android系统添加一种默认字体,类似“sans”,“serif”,“monospace” 在android系统中,默认的中文字体只有一种:DroidSansFallback.ttf,如果想在android应用程序中随意设置想要的中文字体,除了在应用程序中通过assets目录引入字体文件外,还可以通过增加android默认字体的方式来实现。添加步骤大致如下:1)在frameworks/base/data/fonts目录下添加字体文件,例如Driod-kaishu.ttf;2)在skia中增加楷书这一字体,需要修改的文件主要有skFontHost.cpp、skTypeface.cpp、Typeface.java等;3)在java层添加楷书字体相关API,需要修改的文件主要有typeface.java和textview.java;4)编译SDK5)将新生成的sdk导入Eclipse,在eclipse中即可通过setTypeface(Typeface.KAISHU)和android:typeface=(“kaishu”)两种方式设置自己添加的字体。 Android 字体设置 Android 对中文字体支持很不好~~ 需要加入相应的字体库 (1)创建布局layout //创建线性布局 LinearLayoutlinearLayout=newLinearLayout(this); //设定线性布局为垂直方向 linearLayout.setOrientation(LinearLayout.VERTICAL); //以该线性布局做视图 setContentView(linearLayout); (2)针对正常字体 //普通正常字体 normal=newTextView(this); //设置字体内容,请注意:目前Android主要针对拉丁语系可使用字型设定,中文暂不支持 normal.setText("NormalFont FYI"); //设置字体大小 normal.setTextSize(20.0f); //设置字型为默认,正常字体 normal.setTypeface(Typeface.DEFAULT,Typeface.NORMAL); //增加该字体并显示到布局linearLayout中 linearLayout.addView(normal,newLinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); (3)针对粗体字体 //粗体字体 bold=newTextView(this); bold.setText("BoldFont FYI"); bold.setTextSize(20.0f); //设置字体颜色为蓝色 bold.setTextColor(Color.BLUE); //设置字型为默认粗体,粗体字体 bold.setTypeface(Typeface.DEFAULT_BOLD, Typeface.BOLD); linearLayout.addView(bold,newLinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); (4)针对斜体字体 //斜体字体 italic=newTextView(this); italic.setTextSize(20f); italic.setText("ItalicFont FYI"); //设置字体颜色为红色 italic.setTextColor(Color.RED); //设置字型为等宽字型,斜体字体 italic.setTypeface(Typeface.MONOSPACE,Typeface.ITALIC); linearLayout.addView(italic,newLinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); (5)针对粗斜体字体 //粗斜体字体 italic_bold=newTextView(this); italic_bold.setTextSize(20f); italic_bold.setText("Italic& Bold Font FYI"); //设置字体颜色为黄色 italic_bold.setTextColor(Color.YELLOW); //设置字型为等宽字型,斜体字体 italic_bold.setTypeface(Typeface.MONOSPACE,Typeface.BOLD_ITALIC); linearLayout.addView(italic_bold,newLinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); (6)针对中文仿“粗体” //针对Android字型的中文字体问题 chinese=newTextView(this); chinese.setText("中文粗体显示效果"); //设置字体颜色 chinese.setTextColor(Color.MAGENTA); chinese.setTextSize(20.0f); chinese.setTypeface(Typeface.DEFAULT_BOLD, Typeface.BOLD); //使用TextPaint的仿“粗体”设置setFakeBoldText为true。目前还无法支持仿“斜体”方法 tp=chinese.getPaint(); tp.setFakeBoldText(true); linearLayout.addView(chinese,newLinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); (7)自定义创建字型 //自定义字体字型 custom=newTextView(this); //字体MgOpenCosmeticaBold.ttf放置于assets/font/路径下 typeface=Typeface.createFromAsset(getAssets(),"font/MgOpenCosmeticaBold.ttf"); custom.setTypeface(typeface); custom.setText("CustomFont FYI"); custom.setTextSize(20.0f); //设置字体颜色 custom.setTextColor(Color.CYAN); linearLayout.addView(custom,newLinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); |