动态修改安卓桌面icon
动态修改安卓桌面icon
·
动态修改安卓桌面icon
继承启动activity
网上很多说使用activity-alias的,后面看到知乎一个文章:Android动态变更图标和应用名,觉得也是写成一个activity合理一些。
这里直接继承原来的启动activity,内容为空就行:
public class NewMainActivity1 extends MainActivity {
}
在manifest内注册
这里就不用动原来的activity了,自己新写注册文件:
<activity
android:name=".NewMainActivity1"
android:enabled="false"
android:exported="true"
android:icon="@drawable/icon"
android:label="test1"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
以singleInstance模式新建设置activity
这里以SettingActivity为例,用一个对话框来选择图标,稍有不同的是,我这设置完会回到启动的activity,如果是使用别名应该做不到。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setting);
new AlertDialog.Builder(this)
.setTitle("设置图标activity")
.setMessage("切换不同入口activity,在桌面显示不同得icon")
.setNegativeButton("取消", (dialog, which) -> testMutiIcon(-1))
.setNeutralButton("恢复", (dialog, which) -> testMutiIcon(0))
.setPositiveButton("切换到新icon", (dialog, which) -> testMutiIcon(1))
.create()
.show();
}
private void testMutiIcon(int type) {
PackageManager pm = getPackageManager();
ComponentName mainComp = new ComponentName(this, "com.xxx.MainActivity");
ComponentName new1Comp = new ComponentName(this, "com.xxx.NewMainActivity1");
Intent intent;
if(type == 0) {
pm.setComponentEnabledSetting(mainComp, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
pm.setComponentEnabledSetting(new1Comp, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
intent = new Intent(this, MainActivity.class);
}else if(type == 1) {
pm.setComponentEnabledSetting(mainComp, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
pm.setComponentEnabledSetting(new1Comp, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
intent = new Intent(this, NewMainActivity1.class);
}else {
if (PackageManager.COMPONENT_ENABLED_STATE_DISABLED == pm.getComponentEnabledSetting(mainComp)) {
intent = new Intent(this, NewMainActivity1.class);
}else {
intent = new Intent(this, MainActivity.class);
}
}
startActivity(intent);
finish();
}
这里intent这么写是因为前面activity的帐已经被销毁了,可以通过系统的任务栏查看,所以我们要重新跳转到主界面,这里MainActivity和NewMainActivity1内容是一样的,但是实际已经是两个类了。
跳转到设置
跳转和原文章写的差不多,多了个版本限制:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Intent intent = new Intent(this, SettingActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
startActivity(intent);
}
最后
因为是上班空闲时间写的,写的不是很好。
更多推荐
已为社区贡献19条内容
所有评论(0)