溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android動態(tài)更換應(yīng)用圖標的方法

發(fā)布時間:2022-07-04 09:42:20 來源:億速云 閱讀:925 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Android動態(tài)更換應(yīng)用圖標的方法”,在日常操作中,相信很多人在Android動態(tài)更換應(yīng)用圖標的方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Android動態(tài)更換應(yīng)用圖標的方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

技術(shù)實現(xiàn)

如果說多年以前,實現(xiàn)圖標的切換還是一種時髦的技術(shù),那么,我們可以直接使用PackageManager就可以實現(xiàn)動態(tài)更換桌面圖標。實現(xiàn)的細節(jié)是,在Manifest文件中使用標簽準備多個Activity入口,沒個activity都指向入口Activity,并且為每個擁有標簽的activity設(shè)置單獨的icon和應(yīng)用名,最后調(diào)用SystemService 服務(wù)kill掉launcher,并執(zhí)行l(wèi)auncher的重啟操作。

首先,我們在AndroidManifest.xml文件中添加如下代碼:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.xzh.demo">

    <!-- 權(quán)限-->
    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/wb_default_logo"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/wb_default_logo"
        android:supportsRtl="true"
        android:theme="@style/Theme.AndroidDemo">

       ...//省略其他代碼

        <!-- 默認微博-->
        <activity-alias
            android:name="com.xzh.demo.default"
            android:targetActivity=".MainActivity"
            android:label="@string/app_name"
            android:enabled="false"
            android:icon="@mipmap/wb_default_logo"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

        <!-- 3D微博-->
        <activity-alias
            android:name=".threedweibo"
            android:targetActivity=".MainActivity"
            android:label="@string/wb_3d"
            android:enabled="false"
            android:icon="@mipmap/wb_3dweibo"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

        ... //省略其他

    </application>
</manifest>

上面配置中涉及到的屬性如下:

  • android:name:注冊的組件名字,啟動組件的名稱。

  • android:enabled:是否啟用這個組件,也就是是否顯示這個入口。

  • android:icon:圖標

  • android:label:名稱

  • android:targetActivity:默認的activity沒有這個屬性,指定目標activity,與默認的activity中的name屬性是一樣的,需要有相應(yīng)的java類文件。

接著,我們在MainActivity觸發(fā)Logo圖標更換邏輯,代碼如下:

class MainActivity : AppCompatActivity() {
    var list: List<LogoBean> = ArrayList()
    var recyclerView: RecyclerView? = null
    var adapter: LogoAdapter? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initView()
        initData()
        initRecycle()
    }
    private fun initView() {
        recyclerView = findViewById(R.id.recycle_view)
    }
    private fun initData() {
        list = Arrays.asList(
            LogoBean(R.mipmap.wb_default_logo, "默認圖標", true),
            LogoBean(R.mipmap.wb_3dweibo, "3D微博", false),
            LogoBean(R.mipmap.wb_cheese_sweetheart, "奶酪甜心", false),
            LogoBean(R.mipmap.wb_chocolate_sweetheart, "巧克力", false),
            LogoBean(R.mipmap.wb_clear_colorful, "清透七彩", false),
            LogoBean(R.mipmap.wb_colorful_sunset, "多彩日落", false),
            LogoBean(R.mipmap.wb_colorful_weibo, "炫彩微博", false),
            LogoBean(R.mipmap.wb_cool_pool, "清涼泳池", false),
            LogoBean(R.mipmap.wb_fantasy_purple, "夢幻紫", false),
            LogoBean(R.mipmap.wb_fantasy_starry_sky, "幻想星空", false),
            LogoBean(R.mipmap.wb_hot_weibo, "熱感微博", false),
        )
    }
    private fun initRecycle() {
        adapter =LogoAdapter(this,list);
        val layoutManager = GridLayoutManager(this, 3)
        recyclerView?.layoutManager = layoutManager
        recyclerView?.adapter = adapter
        adapter?.setOnItemClickListener(object : OnItemClickListener {
            override fun onItemClick(view: View?, position: Int) {
                 if(position==1){
                     changeLogo("com.xzh.demo.threedweibo")
                 }else if (position==2){
                     changeLogo("com.xzh.demo.cheese")
                 }else if (position==3){
                     changeLogo("com.xzh.demo.chocolate")
                 }else {
                     changeLogo("com.xzh.demo.default")
                 }
            }
        })
    }

    fun changeLogo(name: String) {
        val pm = packageManager
        pm.setComponentEnabledSetting(
            componentName,
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP
        )
        pm.setComponentEnabledSetting(
            ComponentName(this, name),
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP
        )
        reStartApp(pm)
    }
    fun reStartApp(pm: PackageManager) {
        val am = getSystemService(ACTIVITY_SERVICE) as ActivityManager
        val intent = Intent(Intent.ACTION_MAIN)
        intent.addCategory(Intent.CATEGORY_HOME)
        intent.addCategory(Intent.CATEGORY_DEFAULT)
        val resolveInfos = pm.queryIntentActivities(intent, 0)
        for (resolveInfo in resolveInfos) {
            if (resolveInfo.activityInfo != null) {
                am.killBackgroundProcesses(resolveInfo.activityInfo.packageName)
            }
        }
    }
}

注意上面的changeLogo()方法中的字符串需要和AndroidManifest.xml文件中的<activity-alias>的name相對應(yīng)。運行上面的代碼,然后點擊應(yīng)用中的某個圖標,就可以更換應(yīng)用的桌面圖標,

如下圖所示:

Android動態(tài)更換應(yīng)用圖標的方法

到此,關(guān)于“Android動態(tài)更換應(yīng)用圖標的方法”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI