关于Android Launcher图标上面动态改变数字的实现

由于项目需要使用到类似小米应用商店的图标数字提示功能,谷歌百度了许多文章都没看到有真正意义上的实现(没有在国外网站上搜索),有实现在APP内部的一个ImageView上面更新数字的,当然这种太简单无非我们想要的,也要通过快捷方式更新的,这感觉也有点鸡肋,最接近真正意义上实现的是写一个自己的Home,然后在Home里面实现更新图标的数量提示,但是也不靠谱,为了一个APP的数量更新而去写一个HOME,并且别人也不会安装你这个HOME的。

下面贴上接近真正意义上实现的HOME部分代码,虽然没有满足需求,但是这种想法可能也是谷歌的HOME的内部实现了(谷歌HOME中的短信数量提示等,像我们平时看到的图标有数量提示的都是在别人的HOME中早就写了类似功能了的,例如小米中的应用商店,三星HOME中的邮件、短信)。

效果图:

关于Android Launcher图标上面动态改变数字的实现

首先要有个activity能成为Home,所以它的intent filter配置如下

 <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
这样按home键它就能出现了,

关于Android Launcher图标上面动态改变数字的实现

第二个是系统自带的home
这个activity非常简单,用一个gridview列出系统中所有的launcher,gridview的adapter的getview方法中,对特定的launcher进行处理,显示右上角那个红字

列出所有的launcher代码如下

PackageManager manager = getPackageManager();

		Intent mainIntent = new Intent(Intent.ACTION_MAIN);
		mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

		final List<ResolveInfo> apps = manager.queryIntentActivities(
				mainIntent, 0);




ResolveInfo类loadLabel(manager)可以得到app的名字,info.loadIcon(manager)可以得到app的图标,
info.activityInfo.packageName可以得到app的包名.我就是根据app的包名,在adapter的getView方法中为特定的app特殊处理.

顺便吐槽下android的文档,manager.queryIntentActivities的第二个参数,说的太含糊其辞了.我也不清楚这里用
个0到底啥意思.

在这个自定义的home app中,可以放一个BroadcastReceiver,接收特定的消息后,更新gridview
比如我这里在每次收到短信后,就让短信那个app的数字加1,然后调用adapter的notifyDataSetChanged方法.

这样telnet到模拟器上,使用sms send 10086 content命令,就可以使那个数字递增,达到动态更新的效果

当然了,要完成一个完美的Home application,还有很多很多工作要做......

 

 

实现内容转自:http://www.myexception.cn/android/756559.html


关于Android Launcher图标上面动态改变数字的实现,布布扣,bubuko.com

关于Android Launcher图标上面动态改变数字的实现

上一篇:【玩转cocos2d-x之三十六】Flappy Bird大集结


下一篇:ios 奇葩问题 Prefix.pch 引导的头文件 全部失效