Android數(shù)據(jù)轉移之Launcher導出數(shù)據(jù)庫給另一臺機器加載
功能描述
1、導出當前l(fā)auncher布局。
2、把布局文件拷貝到另一個機器。(模擬上傳下載服務器布局文件)
3、更新launcher布局。
需求分析
1、數(shù)據(jù)庫拷貝
2、導入數(shù)據(jù)庫
3、對桌面圖標進行分類:
app folder不需要修改,可以直接顯示;
widget、deepshortcut、1*1shortcut需要適配后才能顯示。
實現(xiàn)思路
1、導出launcher布局
只需要將launcher數(shù)據(jù)庫copy出去即可
2、導入數(shù)據(jù)庫
將數(shù)據(jù)庫文件copy到launcher data/data/包名/database/launcher.db
要注意的是,因為launcher在運行過程中,替換數(shù)據(jù)庫文件會導致舊的數(shù)據(jù)庫對象DatabaseHelper無法操作新數(shù)據(jù)庫,如果不做處理,再次操作數(shù)據(jù)庫會有crash;需要重新初始化數(shù)據(jù)庫對象或者重啟launcher,在數(shù)據(jù)庫初始化之前完成copy動作。
3、適配桌面支持的圖標類型
loadWorkspace中,從數(shù)據(jù)庫中加載信息:
3.1、app folder 不需要適配
3.2、widget:
widget適配,參考默認配置布局中從xml讀取數(shù)據(jù)庫,加載widget流程。
widget默認布局能配置上去,就能從數(shù)據(jù)庫中讀取包類名適配上去,只要保證他們走同一套流程即可。
case LauncherSettings.Favorites.ITEM_TYPE_CUSTOM_APPWIDGET:
//widget需要更新widgetID和widget status
if (copySuccess){
c.restoreFlag = LauncherAppWidgetInfo.FLAG_ID_NOT_VALID |
LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY |
LauncherAppWidgetInfo.FLAG_DIRECT_CONFIG;
}
3.3、deep shortcut:
case LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT:
//deep shortcut會在系統(tǒng)中注冊信息
//我們需要根據(jù)數(shù)據(jù)庫里的內容,手動注冊到系統(tǒng),讓用戶重啟機器之后也能正常顯示
//1、查詢已經注冊過的deepshortcut
List<ShortcutInfo> pinnedShortcuts = mShortcutManager.queryForPinnedShortcuts(null, user);
//根據(jù)數(shù)據(jù)庫key獲取pinnedShortcut,這里獲取不到,因為新手機沒有注冊過
} else if (c.itemType == LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT) {
ShortcutKey key = ShortcutKey.fromIntent(intent, c.user);
if (unlockedUsers.get(c.serialNumber)) {
ShortcutInfo pinnedShortcut =shortcutKeyToPinnedShortcuts.get(key);
//
//快捷方式分二種,manifest里寫的 CREATE_SHORTCUT,長按圖標會彈出的那種
//LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC
//LauncherApps.ShortcutQuery.FLAG_MATCH_MANIFEST
//LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED
//固定界面的deepShortCut可以正常顯示,例如setting的BatterySaver,key為com.android.settings/manifest-shortcut-batterySaver#UserHandle{0}
//和
//widget列表里的1*1 未適配
if (pinnedShortcut == null && copySuccess){
DeepShortcutManager sm = DeepShortcutManager.getInstance(context);
List<ShortcutInfo> si = sm.queryForFullDetails(intent.getPackage(),null, c.user);
shortcutKeyToPinnedShortcuts_copyDbFile.clear();
Log.i(TAG,"key : "+key);
for (ShortcutInfo shortcut : si) {
ShortcutKey shortcutKey = ShortcutKey.fromInfo(shortcut);
shortcutKeyToPinnedShortcuts_copyDbFile.put(shortcutKey,
shortcut);
Log.d(TAG,"shortcutKey : "+shortcutKey);
}
pinnedShortcut =
shortcutKeyToPinnedShortcuts_copyDbFile.get(key);
if (pinnedShortcut != null){
copyDbFileNeedAddTo = true;
}
}
//向底層綁定shortcut
com/tblenovo/launcher/model/BgDataModel.java
// Since this is a new item, pin the shortcut in the system server.
//ccsDeepShortCut need pinShortcut
if ((newItem || ccsDeepShortCUTItem) && count.value == 1) {
DeepShortcutManager.getInstance(context).pinShortcut(pinnedShortcut);
}
3.4、11widget:
//widget列表里的11 未適配
長按添加setting中的1*1插件流程:
1、創(chuàng)建快捷方式屬性shortcutInfo
2、向底層申請創(chuàng)建快捷方式createShortcutResultIntent的Intent
3、固定快捷方式createWorkspaceItemFromPinItemRequest
1 2 步驟正常應該在setting中進行,3在launcher中。
全部放在launcher中執(zhí)行,無法達到預期效果
啟動快捷方式時,需要根據(jù)包名和id進行啟動
如果是launcher的包名,只能打開設置主頁,無法跳到對應的快捷方式界面。
1*1widget向底層綁定只是用pinShortcut是不行的,無法成功綁定。
//向系統(tǒng)注冊shortcut //注冊失敗,會檢測包名和data中的包名 WorkspaceItemInfo infoinfo = LauncherAppsCompatVO.createWorkspaceItemFromPinItemRequest( context, LauncherAppsCompatVO.getPinItemRequest(data), 0); //再走上面的pinShortcut完成
到此這篇關于Android數(shù)據(jù)轉移之Launcher導出數(shù)據(jù)庫給另一臺機器加載的文章就介紹到這了,更多相關Android 數(shù)據(jù)轉移內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android判斷和監(jiān)聽底座狀態(tài)和類型的方法介紹
這篇文章主要介紹了Android判斷和監(jiān)聽底座狀態(tài)和類型的方法介紹,例如判斷當前底座狀態(tài)、判斷插入底座類型、監(jiān)控充電充電狀態(tài)等,需要的朋友可以參考下2014-06-06
Android 自定義View實現(xiàn)多節(jié)點進度條功能
這篇文章主要介紹了Android 自定義View實現(xiàn)多節(jié)點進度條,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
Android制作登錄頁面并且記住賬號密碼功能的實現(xiàn)代碼
這篇文章主要介紹了Android制作登錄頁面并且記住賬號密碼功能的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
android串口開發(fā)入門之搭建ndk開發(fā)環(huán)境及第一個jni調用程序
這篇文章主要給大家介紹了關于android串口開發(fā)入門之搭建ndk開發(fā)環(huán)境及第一個jni調用程序的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2018-01-01
Android監(jiān)聽系統(tǒng)來電并彈出提示窗口
本篇文章主要介紹了Android監(jiān)聽系統(tǒng)來電并彈出提示窗口,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10
一篇文章弄懂Android自定義viewgroup的相關難點
這篇文章主要給大家介紹了關于如何通過一篇文章弄懂Android中自定義viewgroup的一些相關難點,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-06-06
Android自定義view Path 的高級用法之搜索按鈕動畫
這篇文章主要介紹了Android自定義view Path 的高級用法之搜索按鈕動畫,需要的朋友可以參考下2017-06-06

