android功能_自动切换APP图标,节假日图标自动变化

目标:

实现切换APP图标功能。即不同的时间显示不同的App Icon。

准备知识:

要实现切换APP图标的功能,就需要对配置在AndroidManifest.xml中的 < activity-alias>(Activity的别名) 有所了解。

< activity-alias>
即:Activity的别名,由targetActivity属性 命名。指定的target activity与别名activity在同一应用中,并且在清单中必须放在别名之前进行声明。

<activity-alias android:enabled=["true" | "false"]
                    android:icon="drawable resource"
                    android:label="string resource"
                    android:name="string"
                    android:targetActivity="string" >
        . . .
    </activity-alias>

属性:
android:enabled
系统是否可以通过此别名实例化目标 Activity。如果可以,则设为“true”;如果不能,则设为“false”。默认值为“true”。

android:icon
通过别名呈现给用户时目标 Activity 的图标。

android:name
别名的唯一名称。该名称应类似于完全限定类名。但是,与目标 Activity 的名称不同,别名名称是任意的,它不引用实际类。

android:targetActivity
可通过别名激活的 Activity 的名称。此名称必须与清单中别名前面的 元素的 name 属性匹配。

实施步骤:

一、androidManifest文件中配置
<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
     // 别名activtiy的名称任意,手动创建空白 MainAliasActivity
    android:name="MainAliasActivity"
    // 默认指定false,如果默认指定true。则应用会出现两个App Icon
    android:enabled="false"
    // 点击别名activity icon 
    android:targetActivity=".MainActivity"
    android:icon="@mipmap/app_logo_square">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity-alias>

创建一个空白的别名activity

public class MainAliasActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // do nothing!!!
    }
}
二、设置定时器实现Icon切换

实现切换Icon方法:

public void switchAppIcon(boolean isSwich){
    ComponentName disabletName = new ComponentName(this, MainActivity.class.getName());
    ComponentName enableName = new ComponentName(this, MainAliasActivity.class.getName());

    if(!isSwich){
         enableName = new ComponentName(this, MainActivity.class.getName());
         disabletName = new ComponentName(this, MainAliasActivity.class.getName());
    }

    this.getPackageManager()
            .setComponentEnabledSetting(disabletName,
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);


    this.getPackageManager()
            .setComponentEnabledSetting(enableName,
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    PackageManager.DONT_KILL_APP);
}

设置定时器(这里使用Rxjava 也可以使用Handler、Timer等):

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // 10秒后 切换Icon
        Observable.timer(10, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<Long>() {
                    @Override
                    public void accept(Long aLong) throws Exception {
                        Log.d("App","切换Icon");
                        switchAppIcon(true);
                    }
                });
        // 20秒后 恢复Icon
        Observable.timer(20, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<Long>() {
                    @Override
                    public void accept(Long aLong) throws Exception {
                        Log.d("App","恢复Icon");
                        switchAppIcon(false);
                    }
                });
    }

小结:

这里只把切换app Icon简单思路串通了一下,要实现完整的切换App Icon的方法还需要考虑
通过Application#registerActivityLifecycleCallbacks方法注册了对应用内Activity生命周期的监听,通过是否有活跃状态的Activity判断应用是否进入了后台。然后再进行Icon的切换和恢复。

参考:

双11快到了,不给你的APP加上自动换图标的功能吗?
< activity-alias>
安卓-自动定时切换APP图标,节假日APP icon图标自动变化

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值