導航:首頁 > 操作系統 > android設置launcher

android設置launcher

發布時間:2022-12-28 00:20:58

android7.0凍結開機動畫無法進入Launcher

/data/system/users/0/package-restrictions.xml

這個文件存儲了所有應用程序的運行狀態,開機立即讀取,經過系統行為的判斷,如果系統必須啟動的APP被禁用了,則不能啟動系統,一直重復重復的某個環節

通過pm命令:
pm enable [–user USER_ID] PACKAGE_OR_COMPONENT 恢復為激活狀態
pm disable [–user USER_ID] PACKAGE_OR_COMPONENT 修改為禁用狀態
pm list packages -d 查看禁用的列表 (返回的package name 的列表)
查package信息(列印出來的是清單文件信息)
mpsys package 包名

/system/priv-app 系統app目錄主要是底層app,如setting 、systemUI、TelephonyProvider

/system/app 系統app目錄 ,主要是三方定製app,如launcher 、Email、Calendar

/data/app 普通應用,push apk至該目錄,reboot設備PM會自動掃描安裝該目錄下的app,正常的用戶安裝也是把apk文件存儲在這個目錄下面

主要看日誌確定幾個過程是否正常,找到問題可能的點

沒有找到intent,可能是launcher沒有編譯進去,如果編譯進去了PackageManager是否完成掃描,沒有掃描檢查其他system/app或者/system/priv-app 有沒有掃描

Android7.0檢查setting是否被禁用,因為在Android 7.0中,啟動過程中有了新的一步。一旦您的手機完全啟動並且Android正在運行,就有一種方法可供開發人員在您登錄前允許通信。其他所有內容都會被鎖定,您無法與任何其他應用進行交互。谷歌甚至為需要立即運行的應用程序插入了一個名為「 Device Storage」的新存儲區域,因為他們無法訪問正常的憑據保護文件系統

Android7.0下的DirectBoot模式特點

1.Credential encrypted storage,默認存儲數據的地方,僅在用戶解鎖手機後可用。

2.Device encrypted storage,主要對應的就是Direct Boot使用的存儲空間。在Direct Boot模式下和用戶解鎖手機後都可以使用的存儲空間

Direct Boot模式下app是無法運行的

要運行的話需要在AndroidManinfest.xml中設置 android:directBootAware="true"

3.launcher啟動流程增加了settings--->FallbackHome--->launcher,比較與Android6.0耗時更多

FallbackHome源碼

Ⅱ android Launcher設置默認桌面圖標!

附件中的apk可以查看你系統中所有應用的包名和類名。 屏幕編號一般手機有5個分屏,你想放在哪個就填哪個(0~4)

Ⅲ android 怎樣調用launcher

如果你要定製一個Android系統,你想用你自己的Launcher(Home)作主界面來替換Android自帶的Home,而且不希望用戶安裝的Launcher來替換掉你的Launcher,應該如何來實現呢?
我們可以通過修改Framework層來實現這樣的功能。

1) 首先了解一下Android的啟動過程。
Android系統的啟動先從Zygote開始啟動,然後......(中間的過程就不說了).....一直到了SystemServer(framework)這個地方,看到這段代碼:

/**
* This method is called from Zygote to initialize the system. This willcause the native
* services (SurfaceFlinger, AudioFlinger, etc..) to be started. Afterthat it will call back
* up into init2() to start the Android services.
*/
native public static void init1(String[] args);

public static void main(String[] args) {
if (SamplingProfilerIntegration.isEnabled()) {
SamplingProfilerIntegration.start();
timer = new Timer();
timer.schele(new TimerTask() {
@Override
public void run() {
SamplingProfilerIntegration.writeSnapshot("system_server");
}
}, SNAPSHOT_INTERVAL, SNAPSHOT_INTERVAL);
}

// The system server has to run all of the time, so it needs to be
// as efficient as possible with its memory usage.
VMRuntime.getRuntime().setTargetHeapUtilization(0.8f);

System.loadLibrary("android_servers");
init1(args);
}

public static final void init2() {
Log.i(TAG, "Entered the Android system server!");
Thread thr = new ServerThread();
thr.setName("android.server.ServerThread");
thr.start();
}
}

從SystemServer的main函數開始啟動各種服務:
首先啟動init1,然後啟動init2.從上面的注釋可以看到:init1這個方法時被Zygote調用來初始化系統的,init1會啟動native的服務如SurfaceFlinger,AudioFlinger等等,這些工作做完以後會回調init2來啟動Android的service。

這里我們主要來關注init2的過程。init2中啟動ServerThread線程,ServerThread中啟動了一系列的服務,比如這些:

ActivityManagerService
EntropyService
PowerManagerService
TelephonyRegistry
PackageManagerService
AccountManagerService
BatteryService
HardwareService
Watchdog
SensorService
BluetoothService
StatusBarService
ClipboardService
InputMethodManagerService
NetStatService
ConnectivityService
AccessibilityManagerService
NotificationManagerService
MountService
DeviceStorageMonitorService
LocationManagerService
SearchManagerService
FallbackCheckinService
WallpaperManagerService
AudioService
BackupManagerService
AppWidgetService

這些大大小小的服務起來以後,開始
((ActivityManagerService)ActivityManagerNative.getDefault()).systemReady()
在systemReady後開始開始啟動Launcher。在尋找Launcher的時候是根據HOME的filter(在Manifest中定義的<categoryandroid:name="android.intent.category.HOME" />)來過濾。
然後根據filter出來的HOME來啟動,如果只有一個HOME,則啟動這個HOME,如果用戶自己裝了HOME,那就會彈出來一個列表供用戶選擇。

我們現在希望從這里彈出我們自己定製的Launcher,同時也不希望彈出選擇HOME的界面,我們不希望用戶修改我們的home,比如我們的home上放了好多廣告,以及強制安裝的程序,不希望用戶把它幹掉。

我們可以通過這樣來實現:

2) 定義一個私有的filter選項,然後用這個選項來過濾HOME.
一般情況下我們使用Manifest中定義的<categoryandroid:name="android.intent.category.HOME"來過濾的,我們現在增加一個私有的HOME_FIRST過濾。

在Intent.java(frameworks/base/core/java/android/content/Intent.java)中添加兩行代碼

//lixinso:添加CATEGORY_FS_HOME
@SdkConstant(SdkConstantType.INTENT_CATEGORY)
public static final String CATEGORY_FS_HOME= "android.intent.category.FS_HOME";

3)修改和CATEGORY_HOME相關的所有的地方,都改成CATEGORY_FS_HOME,主要是framework中的這幾個地方:使用grep命令查找要修改的地方:

grep CATEGORY_HOME -l * -R

將上述文件中和CATEGORY_HOME相關的所有的地方,都改成CATEGORY_FS_HOME。
4) 寫一個自己的Launcher.
可以參考android sample中的Launcher,或者android源代碼中的 /packages/apps/Launcher 來寫。
在Launcher中標記其是不是Launcher的最關鍵的代碼時Manifest中的filter:android:name="android.intent.category.HOME"
現在我們定義了自己的filter,那麼,我們在我們自己寫的Launcher中將Manifest改為:
<application android:process="android.process.acore3"android:icon="@drawable/icon"android:label="@string/app_name">
<activity android:name=".FirstAppActivity"
android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN" />
<categoryandroid:name="android.intent.category. FS_HOME" />
<categoryandroid:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY"/>
</intent-filter>
</activity>
</application>

然後將編譯好的apk放到方式fs100_root/system/app目錄下。

5)將Android自帶的Launcher刪除掉
包括源代碼(packages/apps/Launcher)和apk(/out/target/proct/generic/system/app/Launcher.apk)。

6) 重新編譯Android
做完這些工作,就可以重新編譯Android了,我們可以編譯修改過的幾個相關的包,可以用mmm命令來編譯部分的改動。這里需要這樣編譯:

$ source build/envsetup.sh
$ lunch
$ mmm frameworks/base
$ mmm frameworks/base/services/java
$ mmm frameworks/policies/base/mid
$ mmm frameworks/policies/base/phone

重新啟動開發板,從開發板上就可以看到啟動的Launcher是我們自己的Launcher,不會出現默認的Launcher了,也不會出現選擇界面。

9)我們再驗證一下,如果用戶裝上了一個其他的Launcher(Home)會怎麼樣。
從網上找一個一般的Launcher或者自己寫一個一般的Launcher裝上去,重新啟動,不會出現選擇界面。
按HOME鍵也不會出來兩個HOME來選擇。

這樣我們就牢牢控制了用戶的桌面。
只有我們自己定製的HOME才能裝上。這對於定製Android設備的廠商很有用處。

Ⅳ 如何設置系統唯一的 launcher

定義一個私有的filter選項,然後用這個選項來過濾HOME.
一般情況下我們使用Manifest中定義的<category android:name="android.intent.category.HOME"來過濾的,
我們現在增加一個私有的HOME_FIRST過濾。

在Intent.java(frameworks/base/core/java/android/content/Intent.java)中添加兩行代碼

//lixinso:添加CATEGORY_HOME_FIRST
@SdkConstant(SdkConstantType.INTENT_CATEGORY)
public static final String CATEGORY_HOME_FIRST = "android.intent.category.HOME_FIRST";

3)修改和CATEGORY_HOME相關的所有的地方,都改成HOME_FIRST,主要是framework中的這幾個地方:

frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中
//intent.addCategory(Intent.CATEGORY_HOME);
改成intent.addCategory(Intent.CATEGORY_HOME_FIRST); //lixinso:
//if (r.intent.hasCategory(Intent.CATEGORY_HOME)) {
改成if (r.intent.hasCategory(Intent.CATEGORY_HOME_FIRST)) { //lixinso: Intent.CATEGORY_HOME -> Intent.CATEGORY_HOME_FIRST

frameworks/base/services/java/com/android/server/am/HistoryRecorder.java中
// _intent.hasCategory(Intent.CATEGORY_HOME) &&
改成 _intent.hasCategory(Intent.CATEGORY_HOME_FIRST) && //lixinso: Intent.CATEGORY_HOME->Intent.CATEGORY_HOME_FIRST

frameworks/policies/base/mid/com/android/internal/policy/impl/MidWindowManager.java中
//mHomeIntent.addCategory(Intent.CATEGORY_HOME);
改成 mHomeIntent.addCategory(Intent.CATEGORY_HOME_FIRST); //lixinso

frameworks/policies/base/mid/com/android/internal/policy/impl/RecentApplicationsDialog.java中
//new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME),0);
改成 new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME_FIRST),0); //lixinso

frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java中
//mHomeIntent.addCategory(Intent.CATEGORY_HOME);
改成 mHomeIntent.addCategory(Intent.CATEGORY_HOME_FIRST); //lixinso

frameworks/policies/base/phone/com/android/internal/policy/impl/RecentApplicationsDialog.java中
//ResolveInfo homeInfo = pm.resolveActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME),0);
改成 ResolveInfo homeInfo = pm.resolveActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME_FIRST),0); //lixinso

4) 寫一個自己的Launcher.
可以參考android sample中的Launcher,或者android源代碼中的 /packages/apps/Launcher 來寫。
在Launcher中標記其是不是Launcher的最關鍵的代碼時Manifest中的filter:android:name="android.intent.category.HOME"
現在我們定義了自己的filter,那麼,我們在我們自己寫的Launcher中將Manifest改為:
<application android:process="android.process.acore3" android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".FirstAppActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME_FIRST" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY" />
</intent-filter>
</activity>
</application>

然後將編譯好的apk放到/out/target/proct/generic/system/app目錄下。

5)將Android自帶的Launcher刪除掉,包括源代碼(packages/apps/Launcher)和apk(/out/target/proct/generic/system/app/Launcher.apk)。

6)
做完這些工作,就可以重新編譯Android了,我們可以編譯修改過的幾個相關的包。
如果之前編譯過了Android源碼,可以用mmm命令來編譯部分的改動。
這里需要這樣編譯:

$ . build/envsetup.sh
$ mmm frameworks/base
$ mmm frameworks/base/services/java
$ mmm frameworks/policies/base/mid
$ mmm frameworks/policies/base/phone

7)
編譯完成後重新生成img文件。
$ make snod

8) 現在可以啟動Android模擬器來看效果了。
首先設置環境變數:
$ export ANDROID_PRODUCT_OUT= ./out/target/proct/generic
然後切換到
$ cd ./out/host/linux-x86/bin
運行
$ ./emulator

這樣我們啟動的模擬器裡面用的image就是我們剛才編譯好的自己定製的東西了。
從模擬器上可以看到啟動的Launcher是我們自己的Launcher,不會出現默認的Launcher了,也不會出現選擇界面。

Ⅳ android 如何讓應用程序在主菜單[launcher]程序列表分類顯示在各個屏中

需要向launcher發送創建桌面快捷的廣播,告訴android系統創建桌面圖標。
具體實現方式:
1.要在手機桌面上添加快捷方式,首先需要在manifest中添加許可權。
<!-- 添加快捷方式 -->
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<!-- 移除快捷方式 -->
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" /><!-- 查詢快捷方式 -->
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />

2.添加快捷方式,是向桌面應用(launcher)發送相關action的廣播,相關的action如下:public static final String ACTION_ADD_SHORTCUT = "com.android.launcher.action.INSTALL_SHORTCUT";

3.調用以下代碼:
private void addShortcut(String name) {
Intent addShortcutIntent = new Intent(ACTION_ADD_SHORTCUT);

// 不允許重復創建
addShortcutIntent.putExtra("plicate", false);// 經測試不是根據快捷方式的名字判斷重復的
// 應該是根據快鏈的Intent來判斷是否重復的,即Intent.EXTRA_SHORTCUT_INTENT欄位的value
// 但是名稱不同時,雖然有的手機系統會顯示Toast提示重復,仍然會建立快鏈
// 屏幕上沒有空間時會提示
// 注意:重復創建的行為MIUI和三星手機上不太一樣,小米上似乎不能重復創建快捷方式

// 名字
addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);

// 圖標
addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
Intent.ShortcutIconResource.fromContext(MainActivity.this,
R.drawable.ic_launcher));

// 設置關聯程序
Intent launcherIntent = new Intent(Intent.ACTION_MAIN);
launcherIntent.setClass(MainActivity.this, MainActivity.class);
launcherIntent.addCategory(Intent.CATEGORY_LAUNCHER);

addShortcutIntent
.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launcherIntent);

// 發送廣播
sendBroadcast(addShortcutIntent);
}

4.如果要創建多個,只需要調用多次即可

Ⅵ Android O 默認打開設置launcher3界面所有的APP圖標LOGO形狀的選項

這個選項在開發者模式打開後,會顯示出來。

想要默認顯示出來
在alps\packages\apps\Launcher3\src\com\android\launcher3\graphics\IconShapeOverride.java
中的isSupported()方法中添加

就可以實現。

如果想要修改默認的形狀在IconShapeOverride.java中的

方法中修改。

根據config.xml中的值

可修改默認想要的形狀。

Ⅶ android可以自己開發一個launcher,並且替換掉系統的嗎

可以,但是不建議這么做,開發的laucher的和系統的其他app兼容性需要考慮。

開發一個laucher:在你的app的androidmanifest.xml中定義<category android:name="android.intent.category.LAUNCHER" />
刪除系統的laucher:需要獲得root許可權,建議保留,因為充滿很多危險。
默認:開發的launcher設置默認就好了。
安卓系統中的桌面啟動器,安卓系統的桌面UI統稱為Launcher

Ⅷ android 如何默認launcher

樓主說的有點不清楚哦~
你是說設定某個桌面啟動器程序為默認值嗎?首先,按主屏鍵,出現「使用以下程序打開」,然後勾選下面的「將此程序設定為默認值」,再點擊你所要選擇的桌面,設置完畢。
如果你要取消默認設置,請依次進入 設定》應用程序》找到你之前設置默認的那個桌面程序並點擊進入》找到「清除默認設置」,並點擊即可。

注意:桌面程序的選擇菜單(即是【使用以下程序打開】的菜單)只有在同時安裝了多個桌面程序才會出現。

下次記住要寫清楚問題描述哦~~

Ⅸ android tv 模擬器默認桌面修改 Alternate Launcher開機自動啟動app

搞了個android tv盒子,想修改默認的launcher桌面,網上搜了好幾天,沒有成功。即使設置了如下默認開機launcher在android tv系統中也不會出來選擇開啟哪個launcher的選擇框,可能android tv 系統跟android 系統還不太一樣啊。

於是乎就在網上到處搜方法,還真搜到了一個在模擬器上成功替換默認桌面的方法。
我的模擬器android 版本是 api level 26 應該是android tv 8.0

呃,要進行替換首先模擬器上要有root許可權。但是因為android 7.0之後的模擬器都默認沒有root許可權了。需要這樣再命令行啟動模擬器。找到自己的模擬器目錄:

模擬器起來後,執行adb shell,提示符是$,表示沒有root許可權,然後su,提示符變成#,獲取到root許可權。

執行 pm disable-user --user 0 com.google.android.tvlauncher ,禁用google默認的android tv 桌面。執行之前一定要先安裝自己的有 android.intent.category.HOME android.intent.category.LAUNCHER android.intent.category.DEFAULT 的app 哦

之後冷重新啟動模擬器,你就會發現開機後的桌面變成了自己的app啦。
有空試試我的android tv 機頂盒,看看行不行。
關於不同android tv 版本禁用 google默認 launcher的命令如下,自己多試試,版本對應不一定對,原帖地址是: Alternate Launcher (No Root) on Marshmallow, Nougat, Oreo, Pie Info ,為了方便我把內容轉過來:

呃。。。。恢復原有桌面。。。。

閱讀全文

與android設置launcher相關的資料

熱點內容
考駕照怎麼找伺服器 瀏覽:882
阿里雲伺服器如何更換地區 瀏覽:968
手機app調音器怎麼調古箏 瀏覽:501
銳起無盤系統在伺服器上需要設置什麼嗎 瀏覽:17
紅旗計程車app怎麼應聘 瀏覽:978
如何編寫linux程序 瀏覽:870
吉利車解壓 瀏覽:248
java輸入流字元串 瀏覽:341
安卓軟體沒網怎麼回事 瀏覽:785
dvd壓縮碟怎麼導出電腦 瀏覽:274
冒險島什麼伺服器好玩 瀏覽:541
如何在伺服器上做性能測試 瀏覽:793
命令序列錯 瀏覽:259
javaif的條件表達式 瀏覽:576
手機app上傳的照片怎麼找 瀏覽:531
雲伺服器面臨哪些威脅 瀏覽:748
c語言各種編譯特點 瀏覽:177
路由器多種加密方法 瀏覽:604
程序員阻止電腦自動彈出定位 瀏覽:168
如何做伺服器服務商 瀏覽:762