• 【Android】动态更新Icon


    个人博客:
    http://www.milovetingting.cn

    动态更改图标主要用到activity-aliasPackageManager的setComponentEnabledSetting方法。具体步骤如下:

    1、在AndroidManifest.xml中增加以下声明:

    <activity-alias
            android:name=".alias"
            android:enabled="false"
            android:icon="@mipmap/icon"
            android:label="Alias"
            android:targetActivity=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
    </activity-alias>
    

    完整文件如下:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.wangyz.dynamicicon">
    
        <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:name=".alias"
                android:enabled="false"
                android:icon="@mipmap/icon"
                android:label="Alias"
                android:targetActivity=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity-alias>
        </application>
    
    </manifest>
    

    2、切换图标

    getPackageManager().setComponentEnabledSetting(getComponentName(),
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);
    getPackageManager().setComponentEnabledSetting(new ComponentName(this,
                        getPackageName() + ".alias"),
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                0);
    

    setComponentEnabledSetting方法的最后一个参数,PackageManager.DONT_KILL_APP表示不关闭App,0表示关闭App刷新图标。

    完整文件如下:

    package com.wangyz.dynamicicon;
    
    import android.content.ComponentName;
    import android.content.pm.PackageManager;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void changeIcon(View view) {
           changeIcon();
        }
    
        public void changeIconAlias(View view) {
            changeIconAlias();
        }
    
            private void changeIcon() {
            getPackageManager().setComponentEnabledSetting(getComponentName(),
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);
            getPackageManager().setComponentEnabledSetting(new ComponentName(this,
                            getPackageName() + ".MainActivity"),
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    0);
        }
    
        private void changeIconAlias() {
            getPackageManager().setComponentEnabledSetting(getComponentName(),
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);
            getPackageManager().setComponentEnabledSetting(new ComponentName(this,
                            getPackageName() + ".alias"),
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    0);
        }
    }
    

    源码地址:https://github.com/milovetingting/Samples/tree/master/DynamicIcon

  • 相关阅读:
    单核时代,PHP之类多线程或者多进程的,是怎么处理并发的?是排队吗?
    高并发下的Node.js与负载均衡
    telnet 查看端口是否可访问
    同步与异步--
    函数式编程沉思录(草稿)
    面向状态机编程
    promise是有状态的moand
    异步链式编程—promise沉思录
    同步与异步
    网络编程释疑之:同步,异步,阻塞,非阻塞
  • 原文地址:https://www.cnblogs.com/milovetingting/p/10436746.html
Copyright © 2020-2023  润新知