<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
近日,微博官方釋出了一項新功能,即可以在App設定中動態更換微博的顯示圖示樣式。根據微博官方的說法,除了最原始的圖示外,微博還推出了另外10種不同的樣式,既有3D微博、炫彩微博等保留了眼睛造型的新樣式,也有乳酪甜馨、巧克力等以食物命名的“新口味”,還有夢幻紫、幻想星空等抽象派新造型,給了微博使用者多種選擇的自由。
不過需要注意的是,這一功能並不是面對所有人開放的,只有微博年費會員才能享受。此外,iOS 10.3及以上和Android 10及以上系統版本支援該功能,但是iPad與一加8Pro手機無法使用該功能。因部分手機存在系統差異,會導致該功能不可用,微博方面後續還會對該功能進行進一步優化。
其實,說到底,上述功能用到的是動態更換桌面圖示的技術。如果說多年以前,實現圖示的切換還是一種時髦的技術,那麼,我們可以直接使用PackageManager就可以實現動態更換桌面圖示。
實現的細節是,在Manifest檔案中使用標籤準備多個Activity入口,沒個activity都指向入口Activity,並且為每個擁有標籤的activity設定單獨的icon和應用名,最後呼叫SystemService 服務kill掉launcher,並執行launcher的重啟操作。
首先,我們在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>
上面設定中涉及到的屬性如下:
接著,我們在MainActivity觸發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相對應。執行上面的程式碼,然後點選應用中的某個圖示,就可以更換應用的桌面圖示,
如下圖所示:
不過,測試的時候也遇到
一些適配問題:
到此這篇關於Android動態更換應用圖示詳情的文章就介紹到這了,更多相關Android更換圖示內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45