Android Icon数字角标(BadgeNumber)的实现方式
来源:互联网 发布:淘宝怎么发视频给卖家 编辑:程序博客网 时间:2024/06/04 19:10
Android Icon数字角标(BadgeNumber)的实现方式
http://blog.csdn.net/janice0529/article/details/44344169
Android系统 小米,三星,索尼手机发送桌面快键提醒数字图标,在Android系统中,众所周知不支持BadgeNumber,虽然第三方控件BadgeView可以实现应用内的数字提醒,但对于系统的图标,特别是app的logo图标很难实现数字标志,即使是绘图的方式不断修改,但这种方式天生弊端,实用性很差。但幸运的是,某些ROM厂商提供了私有的API,但也带来了难度,API的不同意意味着代码量的增加和兼容性问题更加突出。
我们现在来实现桌面logo或者说icon右上角的图标,先来看2张图,第一张来自互联网,第二张来自个人实践!(由于实验条件有限,只能测试小米的(⊙o⊙)…,有兴趣的同学测试一下其他的吧)
好了,上代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<code
class
=
"hljs java"
><span
class
=
"hljs-keyword"
>
public
<span
class
=
"hljs-class"
><span
class
=
"hljs-keyword"
>
class
<span
class
=
"hljs-title"
>MainActivity <span
class
=
"hljs-keyword"
>
extends
<span
class
=
"hljs-title"
>Activity {
<span
class
=
"hljs-comment"
>
//必须使用,Activity启动页
<span
class
=
"hljs-keyword"
>
private
<span
class
=
"hljs-keyword"
>
final
<span
class
=
"hljs-keyword"
>
static
String lancherActivityClassName = Welcome.
class
.getName();
<span
class
=
"hljs-meta"
>
@Override
<span
class
=
"hljs-function"
><span
class
=
"hljs-keyword"
>
protected
<span
class
=
"hljs-keyword"
>
void
<span
class
=
"hljs-title"
>onCreate<span
class
=
"hljs-params"
>(Bundle savedInstanceState) {
<span
class
=
"hljs-keyword"
>
super
.onCreate(savedInstanceState);
setContentView(R.layout.common_listview_layout);
}
<span
class
=
"hljs-meta"
>
@Override
<span
class
=
"hljs-function"
><span
class
=
"hljs-keyword"
>
protected
<span
class
=
"hljs-keyword"
>
void
<span
class
=
"hljs-title"
>onResume<span
class
=
"hljs-params"
>() {
<span
class
=
"hljs-keyword"
>
super
.onResume();
sendBadgeNumber();
}
<span
class
=
"hljs-function"
><span
class
=
"hljs-keyword"
>
private
<span
class
=
"hljs-keyword"
>
void
<span
class
=
"hljs-title"
>sendBadgeNumber<span
class
=
"hljs-params"
>() {
String number = <span
class
=
"hljs-string"
>
"35"
;
<span
class
=
"hljs-keyword"
>
if
(TextUtils.isEmpty(number)) {
number = <span
class
=
"hljs-string"
>
"0"
;
} <span
class
=
"hljs-keyword"
>
else
{
<span
class
=
"hljs-keyword"
>
int
numInt = Integer.valueOf(number);
number = String.valueOf(Math.max(<span
class
=
"hljs-number"
>
0
, Math.min(numInt, <span
class
=
"hljs-number"
>
99
)));
}
<span
class
=
"hljs-keyword"
>
if
(Build.MANUFACTURER.equalsIgnoreCase(<span
class
=
"hljs-string"
>
"Xiaomi"
)) {
sendToXiaoMi(number);
} <span
class
=
"hljs-keyword"
>
else
<span
class
=
"hljs-keyword"
>
if
(Build.MANUFACTURER.equalsIgnoreCase(<span
class
=
"hljs-string"
>
"samsung"
)) {
sendToSony(number);
} <span
class
=
"hljs-keyword"
>
else
<span
class
=
"hljs-keyword"
>
if
(Build.MANUFACTURER.toLowerCase().contains(<span
class
=
"hljs-string"
>
"sony"
)) {
sendToSamsumg(number);
} <span
class
=
"hljs-keyword"
>
else
{
Toast.makeText(<span
class
=
"hljs-keyword"
>
this
, <span
class
=
"hljs-string"
>
"Not Support"
, Toast.LENGTH_LONG).show();
}
}
<span
class
=
"hljs-function"
><span
class
=
"hljs-keyword"
>
private
<span
class
=
"hljs-keyword"
>
void
<span
class
=
"hljs-title"
>sendToXiaoMi<span
class
=
"hljs-params"
>(String number) {
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = <span
class
=
"hljs-keyword"
>
null
;
<span
class
=
"hljs-keyword"
>
boolean
isMiUIV6 = <span
class
=
"hljs-keyword"
>
true
;
<span
class
=
"hljs-keyword"
>
try
{
NotificationCompat.Builder builder = <span
class
=
"hljs-keyword"
>
new
NotificationCompat.Builder(<span
class
=
"hljs-keyword"
>
this
);
builder.setContentTitle(<span
class
=
"hljs-string"
>
"您有"
+number+<span
class
=
"hljs-string"
>
"未读消息"
);
builder.setTicker(<span
class
=
"hljs-string"
>
"您有"
+number+<span
class
=
"hljs-string"
>
"未读消息"
);
builder.setAutoCancel(<span
class
=
"hljs-keyword"
>
true
);
builder.setSmallIcon(R.drawable.common_icon_lamp_light_red);
builder.setDefaults(Notification.DEFAULT_LIGHTS);
notification = builder.build();
Class miuiNotificationClass = Class.forName(<span
class
=
"hljs-string"
>
"android.app.MiuiNotification"
);
Object miuiNotification = miuiNotificationClass.newInstance();
Field field = miuiNotification.getClass().getDeclaredField(<span
class
=
"hljs-string"
>
"messageCount"
);
field.setAccessible(<span
class
=
"hljs-keyword"
>
true
);
field.set(miuiNotification, number);<span
class
=
"hljs-comment"
>
// 设置信息数
field = notification.getClass().getField(<span
class
=
"hljs-string"
>
"extraNotification"
);
field.setAccessible(<span
class
=
"hljs-keyword"
>
true
);
field.set(notification, miuiNotification);
Toast.makeText(<span
class
=
"hljs-keyword"
>
this
, <span
class
=
"hljs-string"
>
"Xiaomi=>isSendOk=>1"
, Toast.LENGTH_LONG).show();
}<span
class
=
"hljs-keyword"
>
catch
(Exception e) {
e.printStackTrace();
<span
class
=
"hljs-comment"
>
//miui 6之前的版本
isMiUIV6 = <span
class
=
"hljs-keyword"
>
false
;
Intent localIntent = <span
class
=
"hljs-keyword"
>
new
Intent(<span
class
=
"hljs-string"
>
"android.intent.action.APPLICATION_MESSAGE_UPDATE"
);
localIntent.putExtra(<span
class
=
"hljs-string"
>
"android.intent.extra.update_application_component_name"
,getPackageName() + <span
class
=
"hljs-string"
>
"/"
+ lancherActivityClassName );
localIntent.putExtra(<span
class
=
"hljs-string"
>
"android.intent.extra.update_application_message_text"
,number);
sendBroadcast(localIntent);
}
<span
class
=
"hljs-keyword"
>
finally
{
<span
class
=
"hljs-keyword"
>
if
(notification!=<span
class
=
"hljs-keyword"
>
null
&& isMiUIV6 )
{
<span
class
=
"hljs-comment"
>
//miui6以上版本需要使用通知发送
nm.notify(<span
class
=
"hljs-number"
>
101010
, notification);
}
}
}
<span
class
=
"hljs-function"
><span
class
=
"hljs-keyword"
>
private
<span
class
=
"hljs-keyword"
>
void
<span
class
=
"hljs-title"
>sendToSony<span
class
=
"hljs-params"
>(String number) {
<span
class
=
"hljs-keyword"
>
boolean
isShow = <span
class
=
"hljs-keyword"
>
true
;
<span
class
=
"hljs-keyword"
>
if
(<span
class
=
"hljs-string"
>
"0"
.equals(number)) {
isShow = <span
class
=
"hljs-keyword"
>
false
;
}
Intent localIntent = <span
class
=
"hljs-keyword"
>
new
Intent();
localIntent.putExtra(<span
class
=
"hljs-string"
>
"com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE"
,isShow);<span
class
=
"hljs-comment"
>
//是否显示
localIntent.setAction(<span
class
=
"hljs-string"
>
"com.sonyericsson.home.action.UPDATE_BADGE"
);
localIntent.putExtra(<span
class
=
"hljs-string"
>
"com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME"
,lancherActivityClassName );<span
class
=
"hljs-comment"
>
//启动页
localIntent.putExtra(<span
class
=
"hljs-string"
>
"com.sonyericsson.home.intent.extra.badge.MESSAGE"
, number);<span
class
=
"hljs-comment"
>
//数字
localIntent.putExtra(<span
class
=
"hljs-string"
>
"com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME"
,getPackageName());<span
class
=
"hljs-comment"
>
//包名
sendBroadcast(localIntent);
Toast.makeText(<span
class
=
"hljs-keyword"
>
this
, <span
class
=
"hljs-string"
>
"Sony,"
+ <span
class
=
"hljs-string"
>
"isSendOk"
, Toast.LENGTH_LONG).show();
}
<span
class
=
"hljs-function"
><span
class
=
"hljs-keyword"
>
private
<span
class
=
"hljs-keyword"
>
void
<span
class
=
"hljs-title"
>sendToSamsumg<span
class
=
"hljs-params"
>(String number)
{
Intent localIntent = <span
class
=
"hljs-keyword"
>
new
Intent(<span
class
=
"hljs-string"
>
"android.intent.action.BADGE_COUNT_UPDATE"
);
localIntent.putExtra(<span
class
=
"hljs-string"
>
"badge_count"
, number);<span
class
=
"hljs-comment"
>
//数字
localIntent.putExtra(<span
class
=
"hljs-string"
>
"badge_count_package_name"
, getPackageName());<span
class
=
"hljs-comment"
>
//包名
localIntent.putExtra(<span
class
=
"hljs-string"
>
"badge_count_class_name"
,lancherActivityClassName ); <span
class
=
"hljs-comment"
>
//启动页
sendBroadcast(localIntent);
Toast.makeText(<span
class
=
"hljs-keyword"
>
this
, <span
class
=
"hljs-string"
>
"Samsumg,"
+ <span
class
=
"hljs-string"
>
"isSendOk"
, Toast.LENGTH_LONG).show();
}
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
注意lancherActivityClassName 必须被配置为 启动页 android.intent.category.LAUNCHER
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<code
class
=
"hljs xml"
> <span
class
=
"hljs-tag"
><<span
class
=
"hljs-name"
>activity
<span
class
=
"hljs-attr"
>android:name=<span
class
=
"hljs-string"
>
"com.sample.activites.Welcome"
<span
class
=
"hljs-attr"
>android:configChanges=<span
class
=
"hljs-string"
>
"locale|keyboard|screenSize"
<span
class
=
"hljs-attr"
>android:label=<span
class
=
"hljs-string"
>
"@string/app_name"
<span
class
=
"hljs-attr"
>android:screenOrientation=<span
class
=
"hljs-string"
>
"portrait"
>
<span
class
=
"hljs-tag"
><<span
class
=
"hljs-name"
>intent-filter>
<span
class
=
"hljs-tag"
><<span
class
=
"hljs-name"
>action <span
class
=
"hljs-attr"
>android:name=<span
class
=
"hljs-string"
>
"android.intent.action.MAIN"
/>
<span
class
=
"hljs-tag"
><<span
class
=
"hljs-name"
>category <span
class
=
"hljs-attr"
>android:name=<span
class
=
"hljs-string"
>
"android.intent.category.LAUNCHER"
/>
<span
class
=
"hljs-tag"
></<span
class
=
"hljs-name"
>intent-filter>
<span
class
=
"hljs-tag"
><<span
class
=
"hljs-name"
>intent-filter>
<span
class
=
"hljs-tag"
><<span
class
=
"hljs-name"
>action <span
class
=
"hljs-attr"
>android:name=<span
class
=
"hljs-string"
>
"android.intent.action.CREATE_SHORTCUT"
/>
<span
class
=
"hljs-tag"
></<span
class
=
"hljs-name"
>intent-filter>
<span
class
=
"hljs-tag"
></<span
class
=
"hljs-name"
>activity></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
相互学习,共同进步!
联系方式:240803830
主页:http://www.cnblogs.com/taoboy/
0 0
- Android Icon数字角标(BadgeNumber)的实现方式
- Android Icon数字角标(BadgeNumber)的实现方式
- 有关 Android 应用桌面角标 (BadgeNumber) 实现的探讨
- IOS推送功能的实现(badgeNumber问题)
- Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示
- Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示
- Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示
- Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示
- Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示
- Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示
- 如何实现ICON右上角的数字显示
- CATransition与icon数字角标
- Andoid 桌面icon添加数字角标
- android app图标未读消息数(BadgeNumber)
- 应用程序icon及UITabBar又上角带红圈中数字的实现
- 应用程序icon及UITabBar又上角带红圈中数字的实现
- 应用程序icon及UITabBar又上角带红圈中数字的实现
- IOS推送消息怎么实现icon图标的数字累加
- Python下处理图片
- 安装Nginx时遇到的pcre库问题
- python学习(2):自定义包结构及__init__.py模块和__all__变量的使用
- Ngnix 配置文件介绍
- DIY 3D全景摄像机
- Android Icon数字角标(BadgeNumber)的实现方式
- android---禁止EditText自动弹出键盘
- eclipse智能提示,变量自动补全功能
- WebStorm无法显示文件夹目录
- aria2 bt下载做种问题
- 没有如果
- Dell Win10 win菜单打不开修复方法
- 微信支付的2个容易混淆的问题
- 将IP以整型的方式存储到数据库中