一个有个性的Launcher应该干的事情有以下
第一步是把自己注册成默认程序
private fun makeSelfDefaultLauncher() {
val filter = IntentFilter()
filter.addAction(Intent.ACTION_MAIN)
filter.addCategory(Intent.CATEGORY_LAUNCHER)
filter.addCategory(Intent.CATEGORY_HOME)
filter.addCategory(Intent.CATEGORY_DEFAULT)
val component = ComponentName(applicationContext.packageName, LaunceActivity::class.qualifiedName)
val components = arrayOf<ComponentName>(ComponentName("com.android.launcher", "com.android.launcher.Launcher"), component)
val pm = packageManager
pm.clearPackagePreferredActivities("com.android.launcher")
pm.addPreferredActivity(filter, IntentFilter.MATCH_CATEGORY_EMPTY, components, component)
}
第二步删除旧版的程序
private fun removeDiscardLauncher() {
val packages = packageManager.getInstalledPackages(0)
for (pg in packages) {
val pgName = pg.applicationInfo.packageName
if (pgName.contains("com.jian.launcher")) {
val info = packageManager.getPackageInfo(pgName, PackageManager.GET_CONFIGURATIONS)
val pgVersion = info.versionCode
if (pgVersion < BuildConfig.VERSION_CODE) {
uninstallAppSilence(pgName)
}
}
}
}
private fun uninstallAppSilence(packageName: String) {
val cmd = "system/bin/pm uninstall " + packageName
var process: Process? = null
try {
process = Runtime.getRuntime().exec(cmd)
process.waitFor();
} catch (e: Exception) {
e.printStackTrace()
} finally {
try {
process?.destroy()
} catch (e: Exception) {
e.printStackTrace()
}
}
}