提问人:Devendra Joshi 提问时间:11/1/2023 更新时间:11/1/2023 访问量:46
我想按计划更改应用程序图标如何在 android 中执行此操作
I want to change app icon progrmatically how to do it in android
问:
我正在使用下面的代码以编程方式更改应用程序图标。但是,当我们第一次更改图标时,它就会杀死应用程序。如何避免在更改应用程序图标时杀死应用程序。
PackageManager packageManager = getPackageManager();
packageManager.setComponentEnabledSetting(new ComponentName("package name", "class name"),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
//enables the second icon
packageManager.setComponentEnabledSetting(new ComponentName("package name", "class alias"),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
答:
1赞
ΓDΛ
11/1/2023
#1
不幸的是,应用程序必须.但作为替代方案,我可以提出以下建议。您可以在应用程序关闭后更改它。kill
您可以通过服务来实现这一点。
清单 .xml
<activity-alias
android:name=".one"
android:icon="@mipmap/ic_launcher_one"
android:targetActivity=".ui.MainActivity"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".two"
android:icon="@mipmap/ic_launcher_two"
android:targetActivity=".ui.MainActivity"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
服务.kt
class AppIconChangeService: Service() {
private val aliases = arrayOf(".one", ".two")
override fun onBind(intent: Intent?): IBinder? = null
override fun onTaskRemoved(rootIntent: Intent?) {
changeAppIcon()
stopSelf()
}
fun changeAppIcon() {
val sp = getSharedPreferences("appSettings", Context.MODE_PRIVATE)
sp.getString("activeActivityAlias", ".one").let { aliasName ->
if (!isAliasEnabled(aliasName)) {
setAliasEnabled(aliasName)
}
}
}
private fun isAliasEnabled(aliasName: String): Boolean {
return packageManager.getComponentEnabledSetting(
ComponentName(
this,
"${BuildConfig.APPLICATION_ID}$aliasName"
)
) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED
}
private fun setAliasEnabled(aliasName: String) {
aliases.forEach {
val action = if (it == aliasName)
PackageManager.COMPONENT_ENABLED_STATE_ENABLED
else
PackageManager.COMPONENT_ENABLED_STATE_DISABLED
packageManager.setComponentEnabledSetting(
ComponentName(
this,
"${BuildConfig.APPLICATION_ID}$aliasName"
),
action,
PackageManager.DONT_KILL_APP
)
}
}
}
添加服务清单
<service
android:name=".AppIconChangeService"
android:stopWithTask="false"
/>
已添加服务
class MainActivity: Activity {
override fun onCreate(savedInstanceState: Bundle?) {
startService(Intent(this, ChangeAppIconService::class.java))
}
}
评论