最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android動態(tài)更換應用圖標詳情

 更新時間:2022年07月03日 11:34:22   作者:? xiangzhihong?  ?  
這篇文章主要介紹了Android動態(tài)更換應用圖標詳情,文章圍繞主題展開詳細的介紹,具有一定的參考價值,需要的小伙伴可以參考一下

一、背景

近日,微博官方發(fā)布了一項新功能,即可以在App設置中動態(tài)更換微博的顯示圖標樣式。根據微博官方的說法,除了最原始的圖標外,微博還推出了另外10種不同的樣式,既有3D微博、炫彩微博等保留了眼睛造型的新樣式,也有奶酪甜馨、巧克力等以食物命名的“新口味”,還有夢幻紫、幻想星空等抽象派新造型,給了微博用戶多種選擇的自由。

不過需要注意的是,這一功能并不是面對所有人開放的,只有微博年費會員才能享受。此外,iOS 10.3及以上和Android 10及以上系統(tǒng)版本支持該功能,但是iPad與一加8Pro手機無法使用該功能。因部分手機存在系統(tǒng)差異,會導致該功能不可用,微博方面后續(xù)還會對該功能進行進一步優(yōu)化。

二、技術實現

其實,說到底,上述功能用到的是動態(tài)更換桌面圖標的技術。如果說多年以前,實現圖標的切換還是一種時髦的技術,那么,我們可以直接使用PackageManager就可以實現動態(tài)更換桌面圖標。

實現的細節(jié)是,在Manifest文件中使用標簽準備多個Activity入口,沒個activity都指向入口Activity,并且為每個擁有標簽的activity設置單獨的icon和應用名,最后調用SystemService 服務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">

    <!-- 權限-->
    <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屬性是一樣的,需要有相應的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相對應。運行上面的代碼,然后點擊應用中的某個圖標,就可以更換應用的桌面圖標,

如下圖所示:

 不過,測試的時候也遇到

一些適配問題:

  • 小米9:版本升級時,新版本在AndroidManifest中刪除A3,老版本切換圖標到A3,為卸載直接覆蓋安裝新版本,手機桌面圖標消失。
  • magic 4:版本升級時,新版本在AndroidManifest中刪除A3,老版本切換圖標到A3,為卸載直接覆蓋安裝新版本,手機桌面圖標切換到默認圖標,但點擊之后未能打開APP。

到此這篇關于Android動態(tài)更換應用圖標詳情的文章就介紹到這了,更多相關Android更換圖標內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 5分鐘學會Android設計模式之策略模式Strategy Pattern教程

    5分鐘學會Android設計模式之策略模式Strategy Pattern教程

    這篇文章主要為大家介紹了5分鐘學會Android設計模式之策略模式Strategy Pattern教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Android ADT和SDK Manager無法更新下載解決方案

    Android ADT和SDK Manager無法更新下載解決方案

    這篇文章主要介紹了Android ADT和SDK Manager無法更新下載解決方案的相關資料,需要的朋友可以參考下
    2017-04-04
  • Android圖像處理之泛洪填充算法

    Android圖像處理之泛洪填充算法

    這篇文章主要介紹了泛洪填充算法,工作原理是從一個點開始附近像素點,填充成新的顏色,直到封閉區(qū)域內的所有像素點都被填充新顏色為止,分享給大家供大家參考
    2018-05-05
  • 超實用的Android手勢鎖制作實例教程

    超實用的Android手勢鎖制作實例教程

    這篇文章主要介紹了一個超實用的Android手勢鎖制作實例教程,普通的圓環(huán)形圖標變換,在App和系統(tǒng)的鎖屏界面中都可以調用,需要的朋友可以參考下
    2016-04-04
  • 利用Android實現光影流動特效的方法詳解

    利用Android實現光影流動特效的方法詳解

    Flutter 的畫筆類 Paint 提供了很多圖形繪制的配置屬性,來供我們繪制更豐富多彩的圖形。本篇我們引入一個 Paint 類新的屬性:maskFilter,再結合之前的 shader 和動畫,制作出光影流動特效,感興趣的可以嘗試一下
    2022-07-07
  • 詳解Kotlin協(xié)程的異常處理機制

    詳解Kotlin協(xié)程的異常處理機制

    協(xié)程會遇到各種異常情況,比如協(xié)程被取消、協(xié)程內部發(fā)生錯誤、協(xié)程之間的異常傳播等,這些異常情況需要我們正確地處理,否則可能會導致程序崩潰、資源泄露或者邏輯錯誤,本文將介紹 Kotlin 協(xié)程的異常處理機制,需要的朋友可以參考下
    2023-09-09
  • Android 個人理財工具五:顯示賬單明細 上

    Android 個人理財工具五:顯示賬單明細 上

    本文主要介紹 Android 個人理財工具顯示賬單明細,這里提供了示例代碼,和實現效果圖,幫助大家學習理解ListView的用法,有興趣的小伙伴可以參考下
    2016-08-08
  • Android入門之AlertDialog用法實例分析

    Android入門之AlertDialog用法實例分析

    這篇文章主要介紹了Android入門之AlertDialog用法,對Android初學者有很多的借鑒學習之處,需要的朋友可以參考下
    2014-08-08
  • Android 讀取文件內容實現方法總結

    Android 讀取文件內容實現方法總結

    這篇文章主要介紹了Android 讀取文件內容實現方法的相關資料,這里提供了幾種方法,大家可以選擇使用,需要的朋友可以參考下
    2016-10-10
  • Android打造炫酷進度條效果

    Android打造炫酷進度條效果

    這篇文章主要為大家詳細介紹了Android打造炫酷進度條效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10

最新評論

苗栗县| 那曲县| 安泽县| 科技| 唐海县| 安达市| 巴塘县| 手机| 含山县| 上思县| 麟游县| 太仆寺旗| 江达县| 灵武市| 敦煌市| 凤翔县| 包头市| 墨江| 柞水县| 宁国市| 济阳县| 松潘县| 清流县| 青海省| 海阳市| 西和县| 偃师市| 隆德县| 柘荣县| 九寨沟县| 绥棱县| 黄梅县| 大丰市| 炉霍县| 清原| 丰城市| 措勤县| 海兴县| 德庆县| 平昌县| 乌鲁木齐县|