編輯:關於Android編程
一般在新項目開始之初,我們需要針對客戶需求進行各種系統默認屬性的配置,通常這些屬性都是通過build.prop、settings.db
那麼,要滿足客戶的定制需求,對於我們開發者來說,修改SettingsProvider默認值,而第一次開機時,用來填充settings.db的數據都是從frameworks/base/packages/SettingsProvider/res/values/defaults.xml
接下來,我將從我所參與過的項目中,去一點點的記錄需要修改的屬性都怎麼設置。
對於Android手機ODM界的朋友,通讀這篇文章後,基本上能完成項目前期70%的適配工作(如果是做MTK平台的話,那更好,可以用來控制的宏變量更加豐富)。
第一步、修改frameworks/base/core/res/res/values/config.xml中的
false
第二步、在Marvell1908平台中,沒有根據此property來確定“自動”按鈕的顯示還是隱藏,所以還需在SystemUI中動態確定該CheckBox的顯示與否:
BrightnessController.java中添加如下方法
在updateMode()中調用該方法:
private
//
}
updateAutomaticButton(mAutomaticAvailable);
}
在ToggleSlider.java中添加接口:
Tip:
不支持光感設備去掉“自動調節亮度”需要考慮
修改frameworks/base/core/res/res/values/config.xml中的
10
255
102
10
修改frameworks/base/packages/SettingsProvider/res/values/defaults.xml中的
開關機動畫相關所在路徑是在frameworks/base/cmds/bootanimation/中去操作的(不同平台略有不同);
Android設備的鈴聲資源都是在frameworks/base/data/sounds中
Marvell
#define
#define
#define
#define
用需要替換的開關機鈴聲overlay
Qualcomm平台是在frameworks/base/cmds/bootanimation/
void
{
//
}
需要將替換的資源overlay下boot.wav
Overlay掉frameworks/base/core/res/res/drawable-nodpi/
一般odex化是在4.0以後的版本中有的功能,odex化可以使系統的啟動和程序運行速度大大提高,穩定性不變。但是編譯時生成odex包會大大增加system.img的體積,不利於ota升級,t卡升級,所以在編譯時可以去odex。
需要在.mk文件中添加屬性:
#remove
DISABLE_DEXPREOPT:=true
首先需要檢查要修改的資源是否在frameworks/base/data/sounds/下的notifications/和ringtones/中,如果沒有,需要添加上去,將資源在該目錄下的.mk中按照其他的資源的方式添加進去。然後在device下的.mk中添加屬性:
ADDITIONAL_BUILD_PROPERTIES
ro.config.ringtone
ro.config.notification_sound=Heaven.ogg
注意,在不同的平台中properties的宏定義可能有所不同,在Marvell中ADDITIONAL_BUILD_PROPERTIES為property的overlay
在.mk中修改屬性:
#
PRODUCT_LOCALES
PRODUCT_PROPERTY_OVERRIDES
注意是
:=
+=
?=
在這裡就是將這些屬性全部覆蓋之前的定義。可以看到在這裡定義了
在.mk中添加:
PRODUCT_PROPERTY_OVERRIDES
persist.sys.timezone=
另外還有一種方法:
#set
setprop
直接在底層修改默認時區(如果不熟悉,最好讓驅動工程師來修改)
與修改開關機鈴聲一樣,開關機動畫相關代碼都是在frameworks/base/cmds/bootanimation/中,需要我們根據代碼去制作動畫。
一般在Android設備中,開關機動畫都是通過幀動畫來實現的。
以Marvell平台為參考:
frameworks/base/cmds/bootanimation/BootAnimation.cpp
#define
#define
//add
#define
#define
所以需要去overlay
1)
2)
3)
4)
5)
desc.txt
我們看一個dest.txt:
320
p
p
320
p
p
最後必須要有回車符,確保指令都已經完成。
6)
需要選擇“壓縮文件格式”為
需要選擇“壓縮方式”為“存儲”。
制作完成。
狀態欄透明的屬性是在andorid4.4上面出現的新特性,不過對於狀態欄透明效果的設置要求比較高,一般是在運行內存>=512M的設備上才能運行,因為要實現狀態欄透明需要硬件加速來配合,不然動畫效果十分卡頓。修改狀態欄透明需要SystemUI與Launcher配合,才能達到效果。
1)
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java::
public
//
2)
parent="@android:style/Theme.Holo.Wallpaper.NoTitleBar">
在android4.4以後framewok中Theme.xml中增加了以下兩個屬性節點:
由於Marvell項目中使用的是實體按鍵,所以就只覆蓋了上面那個屬性。
3)
}
在Launcher的onCreate方法中使用自定義屬性,或者直接在AndroidMainest.xml中通過android:theme=”@style/
一般這個需求是針對使用Google原生啟動器Launcher2而言的。因為在Google原生代碼裡,有顯示GoogleSearch的代碼,主要是為了顯示Google搜索,如果有GoogleVoice還可以顯示語音搜索按鈕,針對大陸手機來說,Google
第一、去掉Google搜索框
1.
packages/apps/Launcher2/src/com/android/launcher2/Launcher.java::
private
final
ComponentName
if(Build.DEVICE.equals("pxa1L88H3"))
}
if
//
else
}
}
在Launcher2進程啟動時,onCreate和onResume中會更新GlobalSearch圖標並保存在數組中,上面的修改
if
2.
在packages/apps/Launcher2/res/values/dimens.xml中修改節點
0dp
這樣也能保證永不顯示Google搜索框
3.
去掉AndroidManifest.xml的下面節點:
比較可取的是1、3這兩種方法。
第二、去掉Workspace的占位
主要是微調布局,修改values/dimens.xml,按需修改適當的數值,下面是幾個親測符合ho9021項目4.3寸屏的布局
調整cellLayout的布局+調整ShortcutIcon的間距,使其整體上移
28dp
48dp
18dp
另外還可以通過設置Workspace的高度配合調整ShortcutIcon的間距也能實現:
100dp
在這裡所說的Launcher都是Google原生的Launcher2應用。
修改packages/apps/Launcher2/src/com/android/launcher2/LauncherModel.java::
private
//
apps
}
if
return;
}
//
ResolveInfo
if(null!=
info.activityInfo.packageName.equals("com.android.spare_parts"))
removeApp
}
}
if(null
apps.remove(removeApp);
}
//
N
//
}
上面的代碼是在啟動器啟動時會通過一個List將各個app信息保存起來,然後再添加到桌布上,上面的代碼就是遍歷獲取到的所有的符合條件的app,過濾掉我們不想顯示的。當然該代碼可以抽取出來成一個方法,或者放入油條包中,抽象成一個static的工具。
那麼如果要隱藏掉的app比較多的時候怎麼辦?
任務管理器是Setting模塊下的一個功能,其實也就是“設置—應用程序—全部”。需要修改packages/apps/settings/src/com/android/settings/applications/ManageApplications.java
static
ArrayList
ArrayList
//
if
}
//
}
}
默認輸入法是在frameworks/base/packages/SettingsProvider/res/values/defaults.xml中的節點,只需要在.mk中去overlay即可。
com.android.inputmethod.latin/
其中def_enable_input_methods是要顯示到輸入法列表中的默認輸入法,可以看到這個節點中默認的有兩個輸入法,Android鍵盤和百度輸入法;
def_input_method是默認被選中的那個輸入法,可以看到這個節點中默認被選中的輸入法是百度輸入法。
com.baidu.input->在AndroidManifest.xml中的
.ImeService
1.在.mk
2.Overlay
frameworks/base/packages/SettingsProvider/res/values/defaults.xml:
false
因為在frameworks/base/packages/settingsprovider/src/com/android/providers/settings/
如果設置了
該需求是在Marvell的ho_9021上做的,在9021上除了Google原生Launcher之外,還預置了一個賓果桌面,那麼在第一次開機時,由於沒有設置preferred
這個需求是在第一次開機時,直接進入默認的Launcher,不彈出選項框,當用戶從“設置—應用—全部”,選擇正在使用的Launcher,並點擊“清除默認設置”;就能去掉Launcher的preferred
該需求修改的前提是系統沒有開機向導,使用Android默認的開機向導。在Android源碼會有有個packages/apps/Provision模塊,很少有人注意到他。
從他的AndroidManifest.xml中從category
下面就步入正題,分析一下怎麼設置默認launcher,首先有兩個關鍵點:
1.
2.
ComponentName
pm.setComponentEnabledSetti
這段代碼是將Provision
設置默認Luancher:
1.
Tips:
在此處獲取系統中Launcher的List時不能使用pckageManager的
getHomeActivities(List
2.
int
for(int
final
final
if(null
resolveInfoList.remove(i);
size
}
i++;
3.
ComponentName[]
ComponentName
"com.ibingo.launcher2.Launcher");
int
for(int
final
final
if(null
continue;
}
set[i]
if(defaultLauncher.getClassName().equals(activityInfo.name))
Slog.d(TAG,
}
4.
IntentFilter
filter.addAction(Intent.ACTION_MAIN);
filter.addCategory(Intent.CATEGORY_HOME);
filter.addCategory(Intent.CATEGORY_DEFAULT);
pm.clearPackagePreferredAct
pm.addPreferredActivity(filter,
Slog.d(TAG,
我們可以看到第2、3步驟都是在為PackageManager的addPreferredActivity方法獲取參數,主要的設置preferred
Tips:
在整個添加的代碼中需要加上try-catch保護
那麼我們再來看一下addPreferredActivity這個方法:
Filter是過濾條件,也就是Application中滿足filter的參數配置的Activity才會被操作;
Match
Set
Activity
了解了這個方法之後,不僅是默認Launcher,我們同樣也可以從滿足一定filter條件的Applications中選擇一個,設置成默認值。
frameworks/base/wifi/java/android/net/wifi/WifiApConfigStore.java中的
setDefaultApConfiguratio
//
config.SSID
//
}
兩種方法:
1.
2.
config.SSID
mContext.getString(R.string.wifi_tether_configure_ssid_default));
1.
2.
DatabaseHelper.java中添加:
loadGlobalSettings(SQLiteDatabase
//
loadSetting(stmt,Settings.Global.WIFI_P2P_DEVICE_NAME,
SystemProperties.get("ro.settings.wifi_p2p_name",""));
//
}
3.
getPersistedDeviceName()
String
//
if
//
}
//
}
一般情況下正常修改,第1第2步就行了,比較規范,如果再添加上第3步的修改,更加保險,邏輯緊密,無懈可擊;如果只在第3步的getPersistedDeviceName()
請修改frameworks/base/core/res/res/values/Strings.xml文件中的如下默認字符:
AndroidAP
修改為需要的字符串
系列一到這裡完了。
Android6.0 SystemUI啟動簡析及圖標顯示刷新
Android6.0 SystemUI啟動簡析及圖標顯示刷新。Android系統的SystemUI包含狀態欄、導航欄、快捷設置、通知欄及鎖屏界面等等;主要流程是從Syst
Android創建和使用數據庫SQLIte
一、關系型數據庫SQLIte 每個應用程序都要使用數據,Android應用程序也不例外
手機QQ如何截圖 手機QQ截圖方法
安卓手機QQ自帶截圖功能,iPad、iPhone則需要使用iOS系統自帶的截圖方法或者第三方APP。下面就隨小編分別來看看,安卓手機QQ和iOS系統的ipa
Android控件之ListView用法實例詳解
本文實例講述了Android控件之ListView用法。分享給大家供大家參考。具體如下:示例一:在android開發中ListView是比較常用的組件,它以列表的形式展示