Android动态更换应用图标的方法(android,开发技术)

时间:2024-05-10 01:34:03 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

技术实现

如果说多年以前,实现图标的切换还是一种时髦的技术,那么,我们可以直接使用PackageManager就可以实现动态更换桌面图标。实现的细节是,在Manifest文件中使用标签准备多个Activity入口,没个activity都指向入口Activity,并且为每个拥有标签的activity设置单独的icon和应用名,最后调用SystemService 服务kill掉launcher,并执行launcher的重启操作。

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

<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="com.xzh.demo"><!--权限--><uses-permissionandroid:name="android.permission.KILL_BACKGROUND_PROCESSES"/><applicationandroid: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-aliasandroid: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><actionandroid:name="android.intent.action.MAIN"/><categoryandroid:name="android.intent.category.LAUNCHER"/></intent-filter></activity-alias><!--3D微博--><activity-aliasandroid:name=".threedweibo"android:targetActivity=".MainActivity"android:label="@string/wb_3d"android:enabled="false"android:icon="@mipmap/wb_3dweibo"android:exported="true"><intent-filter><actionandroid:name="android.intent.action.MAIN"/><categoryandroid: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触发Logo图标更换逻辑,代码如下:

classMainActivity:AppCompatActivity(){varlist:List<LogoBean>=ArrayList()varrecyclerView:RecyclerView?=nullvaradapter:LogoAdapter?=nulloverridefunonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)initView()initData()initRecycle()}privatefuninitView(){recyclerView=findViewById(R.id.recycle_view)}privatefuninitData(){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),)}privatefuninitRecycle(){adapter=LogoAdapter(this,list);vallayoutManager=GridLayoutManager(this,3)recyclerView?.layoutManager=layoutManagerrecyclerView?.adapter=adapteradapter?.setOnItemClickListener(object:OnItemClickListener{overridefunonItemClick(view:View?,position:Int){if(position==1){changeLogo("com.xzh.demo.threedweibo")}elseif(position==2){changeLogo("com.xzh.demo.cheese")}elseif(position==3){changeLogo("com.xzh.demo.chocolate")}else{changeLogo("com.xzh.demo.default")}}})}funchangeLogo(name:String){valpm=packageManagerpm.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)}funreStartApp(pm:PackageManager){valam=getSystemService(ACTIVITY_SERVICE)asActivityManagervalintent=Intent(Intent.ACTION_MAIN)intent.addCategory(Intent.CATEGORY_HOME)intent.addCategory(Intent.CATEGORY_DEFAULT)valresolveInfos=pm.queryIntentActivities(intent,0)for(resolveInfoinresolveInfos){if(resolveInfo.activityInfo!=null){am.killBackgroundProcesses(resolveInfo.activityInfo.packageName)}}}}

注意上面的changeLogo()方法中的字符串需要和AndroidManifest.xml文件中的<activity-alias>的name相对应。运行上面的代码,然后点击应用中的某个图标,就可以更换应用的桌面图标,

如下图所示:

Android动态更换应用图标的方法

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Android动态更换应用图标的方法的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Python中pass语句的语法是什么下一篇:

5 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18