❶ 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設備的廠商很有用處。
❷ Android O 默認打開設置launcher3界面所有的APP圖標LOGO形狀的選項
這個選項在開發者模式打開後,會顯示出來。
想要默認顯示出來
在alps\packages\apps\Launcher3\src\com\android\launcher3\graphics\IconShapeOverride.java
中的isSupported()方法中添加
就可以實現。
如果想要修改默認的形狀在IconShapeOverride.java中的
方法中修改。
根據config.xml中的值
可修改默認想要的形狀。
❸ 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 ,為了方便我把內容轉過來:
呃。。。。恢復原有桌面。。。。
❹ launcher是什麼意思
launcher的意思是安卓系統桌面啟動器。
Launcher是安卓系統中的桌面啟動器,安卓系統的桌面UI統稱為Launcher。Launcher是安卓系統中的主要程序組件之一。
安卓系統中如果沒有Launcher就無法啟動安卓桌面,Launcher出錯的時候,安卓系統會出現「進程 com.android.launcher 意外停止」的提示窗口。這時需要重新啟動Launcher。
特點:
DragLayer實際上也是一個抽象的界面,用來處理拖動和對事件進行初步處理然後按情況分發下去,角色是一個controller。它首先用onInterceptTouchEvent(MotionEvent)來攔截所有的touch事件。
如果是長按item拖動的話不把事件傳下去,直接交由onTouchEvent()處理。這樣就可以實現item的移動了,如果不是拖動item的話就把事件傳到目標view。
交有目標view的事件處理函數做相應處理。如果有要對事件的特殊需求的話可以修改onInterceptTouchEvent(MotionEvent)來實現所需要的功能。
以上內容參考網路—launcher
❺ 如何將Windows launcher 設置為Android 手機的主頁面
在安卓手機中安裝了第三方的桌面(Launcher)實現更換系統界面風格的效果,不過,當你安裝第三方Launcher並錯選「始終」以該桌面啟動,之後卻發現這個系統不好用,應該要怎麼切換回來呢?
想從第三方桌面切換回默認的系統界面有3個方法。以神舟X55手機為例,想將iOS風格的「iLauncher」切換回默認的「Launcher3」,可以從以下操作入手:
1.進入進入「系統設置->主屏幕」,在裡面勾選「Launcher3」,即可恢復默認的啟動器。
2.進入「系統設置->應用」,點擊iLauncher圖標進入應用信息界面,選擇「卸載」,之後手機也會恢復默認的啟動器。
3.進入「系統設置->應用」,點擊iLauncher圖標進入應用信息界面,選擇「清除數據」,然後按主頁鍵,此時會重新彈出啟動器選擇的窗口,再選擇默認啟動器即可。
!
❻ Android 怎麼把Launcher桌面的每一屏修改為x*x的布局
Android 怎麼把Launcher桌面的每一屏修改為x*x的布局
安裝scim:
apt-get install scim scim-chinese
在 /etc/Xsession.d 下建立文件 95xim
寫入下面這些,重啟
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
export LC_CTYPE="zh_CN.UTF-8"
export G_FILENAME_ENCODING=@UTF-8
export XIM="SCIM"
export XMODIFIERS="@im=SCIM"
export GTK_IM_MODULE=scim
export QT_IM_MODULE=scim
scim -d
這樣就可以在X啟動後,按ctrl+space切換到scim輸入法了。