Android 动态更换桌面图标

每当双 11、12 来临之际,Android 手机 Launcher 中的淘宝、天猫图标就会变成双 11、12 主题的图标。实现了动态切换图标、名称

MainActivity

package com.example.modifyappdemo;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button changeIcon;
    private ActivityManager activityManager;
    private PackageManager packageManager;
    private boolean setIcon = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        activityManager = (ActivityManager) this.getSystemService(Activity.ACTIVITY_SERVICE);
        packageManager = getPackageManager();
        changeIcon = findViewById(R.id.changeIcon);
        changeIcon.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.changeIcon:
                if ("SecondApp".equals(getTitle())) {
                    setIcon = false;
                } else {
                    setIcon = true;
                }

                packageManager.setComponentEnabledSetting(new ComponentName(this, "com.example.modifyappdemo.MainActivity"),
                        setIcon == true ? COMPONENT_ENABLED_STATE_DISABLED : PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                        PackageManager.DONT_KILL_APP);

                packageManager.setComponentEnabledSetting(new ComponentName(this, "com.example.modifyappdemo.changeAfter"),
                        setIcon == true ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                        PackageManager.DONT_KILL_APP);
                break;
            default:
                break;
        }
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.modifyappdemo">
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
    <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity-alias
                android:icon="@mipmap/alias_icon"
                android:label="@string/app_name2"
                android:name="changeAfter"
                android:targetActivity=".MainActivity"
                android:enabled="false">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

    </application>

</manifest>

strings.xml

<resources>
    <string name="app_name">FirstApp</string>
    <string name="app_name2">SecondApp</string>
</resources>

原文地址:https://www.cnblogs.com/loaderman/p/11662498.html

时间: 2024-10-12 03:33:43

Android 动态更换桌面图标的相关文章

android如何添加桌面图标和卸载程序后自动删除图标

android如何添加桌面图标和卸载程序后自动删除桌面图标,这是一个应用的安装与卸载过程对桌面图标的操作,下面与大家分享下具体是如何实现的,感兴趣的朋友可以参考下哈 1:创建图标如下 Intent intent = new Intent(); intent.setClass(this, SplashActivity.class); Intent addShortcut = new Intent(ACTION_ADD_SHORTCUT); Parcelable icon = Intent.Shor

android 点击桌面图标,打开手机浏览器进入相应的网站

做一个假的adnroid app,要实现点击桌面图标,打开手机浏览器进入相应的网站,实现方法很简单 import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; public class MainActivity extends Activity { @Override protected void onCreate(Bundle save

Android动态设置纯色图标的颜色

https://blog.csdn.net/qq_20082961/article/details/73718363 以前做了一个流量悬浮窗,悬浮窗里有当前网络状态的图标和网速的文字,想实现改变文字颜色的同时改变状态图标的颜色  实现后分享出来让大家参考下 先上图 以下是关键代码 <ImageView android:id="@+id/iv_icon" android:layout_width="150dp" android:layout_height=&qu

Android一个APK多个入口(多个桌面图标)的实现

前言 Android应用一般都是一个APK一个桌面图标,但有时候我们需要实现一个APK在桌面上有多个图标(比如BAT的某些应用,有桌面快捷方式),对于这种一个APK需要在桌面上显示多个图标的,通常有两种方法来实现: 1. 进入程序后生成桌面快捷方式,这个适合于在程序运行之后生成桌面图标: 2. 在AndroidManifest.xml文件中配置多个入口,这个适合于程序安装完成后就在桌面上显示多个图标. 在桌面生成快捷方式,具体实现方式可参见: 1. 总结:android 创建快捷方式的两种方式+

Android设置壁纸和创建桌面图标

写了个小Demo,实现了设置壁纸和创建桌面图标的逻辑: 创建壁纸比较简单,将Drawable转为Bitmap,然后直接用setWallpaper就行了: Bitmap bitmap = BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.wallpaper); try { Main.this.setWallpaper(bitmap); } catch (IOException e) { e.printStackTra

Android动态布局,并动态为TextView控件设置drawableLeft、drawableRight等属性添加图标

注:(图中每一个条目和图标都是由代码动态生成) 代码动态布局,并需要为每一个条目设置图标,此时用到了 android:drawableLeft="@drawable/icon"  父xml文件: [html] view plaincopyprint? <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.andr

动态更换应用Icon

转:原理1--activity-alias 在AndroidMainifest中,有两个属性: // 决定应用程序最先启动的Activity android.intent.action.MAIN // 决定应用程序是否显示在程序列表里 android.intent.category.LAUNCHER 另外,还有一个activity-alias属性,这个属性可以用于创建多个不同的入口,相信做过系统Setting和Launcher开发的开发者在系统的源码中应该见过很多. 原理2--PM.setCom

android 动态壁纸开发

转:http://www.eoeandroid.com/thread-100389-1-1.html android 动态壁纸开发参考:http://www.ophonesdn.com/article/show/278推荐:http://www.oschina.net/code/snippet_203635_7426http://blog.csdn.net/homebei2/article/details/6079580resources/articles/live-wallpapers.htm

桌面图标未读消息(小米,sony,三星手机)

新消息来了,在桌面的Laucher图标上显示新消息数 /** * 应用桌面图标未读消息显示工具类 * 只支持 小米,三星和索尼 */ public class BadgeUtil { final static String LAUNCHER_ACTIVITY_NAME = "com.wenki.example.activity.SplashActivity"; public static void setBadgeCount(Context context, int count) {