Notification小例子
来源:互联网 发布:java 订阅模式 编辑:程序博客网 时间:2024/05/29 14:46
一:你可学到
- 手机内依据Uri查看联系人
- 权限的添加
- 获取手机内任意一款应用的应用图标
- 对图形的处理,如复制,为图片加上覆盖层--数字。
- 使用RemoteView自定义Notification
二:开始行动
- 新建名为NotificationIconCount的Android Project。
- 首先修改AndroidManifest.xml,加入权限<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>,因为我们要读取联系人。
- 修改main.xml如下,这里定义一个ImageView,勇于预览我们处理好的加上数字的图标。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="center" android:adjustViewBounds="true"/></LinearLayout>
- 先来获取手机内通讯录的图标,如果没有获取到,则使用该应用的图标.
super.onCreate(savedInstanceState); setContentView(R.layout.main); mImageView=(ImageView)findViewById(R.id.icon); //优先采用联系人的图标,如果不存在则采用该应用的图标 Drawable contactIcon;try {contactIcon = getPackageManager().getApplicationIcon("com.android.contacts");} catch (NameNotFoundException e) {contactIcon=null;}Bitmap icon; if(contactIcon instanceof BitmapDrawable){ icon=((BitmapDrawable)contactIcon).getBitmap(); }else{ icon=getResIcon(getResources(), R.id.icon); }
- 这里用到一个自定义的根据资源图标id获取图片的函数,很简单,代码如下:
/** * 根据id获取一个图片 * @param res * @param resId * @return */ private Bitmap getResIcon(Resources res,int resId){ Drawable icon=res.getDrawable(resId); if(icon instanceof BitmapDrawable){ BitmapDrawable bd=(BitmapDrawable)icon; return bd.getBitmap(); }else{ return null; } }
- 获取到图标之后就要对这个图标进行处理了,要为该图标加上联系人数量的覆盖,首先我们看获取联系人个数的函数。
/** * 获取联系人的个数 * @return 手里通讯录中联系人的个数 */ private int getContactCount(){ Cursor c=getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, new String[]{ContactsContract.Contacts._COUNT}, null, null, null); try{ c.moveToFirst(); return c.getInt(0); }catch(Exception e){ return 0; }finally{ c.close(); } }
这里采用Uri的方式获取联系人的cursor,然后获取个数。 - 有了图标和联系人个数就可以生成带联系人个数的图标了,我们看下生成的这个函数。
- 注释的很详细,就不解释了,无非就是定义一个画布(Canvas),然后在上面画图标,画数字文本。
- 然后我们把得到的这个处理过的Bitmap放在我们在main.xml里定义的ImageView里展示就可以看到效果了.
- 我们启动应用看看效果.
我们看到了,右上角红色的1代表我手机中有一个联系人
三:采用状态栏通知的办法展示联系人的数量
- 如果我们监听未读短信的数量,展示在状态栏通知了,就可以用这个方法,我这里还是以联系人的数量为例
- 由于Notification默认的icon字段使用的是一个一个资源的引用类型int,所以我们这里采用RemoteView的方式自定义Notification。定义RemoteView,需要一个layout,用于定义展示的Notification样式,我们新建一个notification.xml布局文件如下:
- 很简单,一个ImageView和一个TextView,用于显示提示的图标和文字。
- 要想使用Notification,我们必须获取一个Service--NotificationManager,Android中由它来管理我们的Notification,获取NotificationManager的代码如下,卸载onCreate方法里
nm=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
- 然后紧接着我们就调用我们定义好的方法来显示通知:
showNotifacation(contactCountIcon);
- 下面我们看一下方法showNotifacation的具体实现:
1. /** 2. * 显示状态栏通知 3. * @param icon 通知内容图标 4. */ 5. private void showNotifacation(Bitmap icon){ 6. Notification notification=new Notification(R.drawable.icon,"联系人数量",System.currentTimeMillis()); 7. //使用RemoteView自定义通知视图 8. RemoteViews contentView=new RemoteViews(getPackageName(), R.layout.notification); 9. contentView.setImageViewBitmap(R.id.image, icon); 10. contentView.setTextViewText(R.id.text, "图标上的红色数字表示手机中联系人的数量"); 11. notification.contentView=contentView; 12. Intent notificationIntent=new Intent(this, NotificationIconActivity.class); 13. PendingIntent contentIntent=PendingIntent.getActivity(this, 0, notificationIntent, 0); 14. notification.contentIntent=contentIntent; 15. nm.notify(NOTIFICATION_CONTACT_ID, notification); 16. }
注释的都很详细,就不一一解释了 - 最后的就是重写onDestroy,在Android销毁该Activity的时候清除我们的通知。
1. @Override 2. protected void onDestroy() { 3. super.onDestroy(); 4. nm.cancel(NOTIFICATION_CONTACT_ID); 5. }
- 运行,可以看到如下效果
可以看到,效果已经出来了。。
四:小结和一点引申
这结的主要关键还是对图片的处理,比如这里的加上数字,当时你也可以加上其他的东西,Canvas里有很多相应的函数可以使用。。
这里说的都是应用内、状态通知等一些显示处理后图片的办法,那么有没有方法处理手机主屏幕上的图标的办法,为他们加上数字呢。比如在短信息的应用图标的右上角加上未读短信数目等,答案是有的,不过是迂回实现的,给个思路就是使用AppWidget,这个可以实现,还能动态更新,具体怎么实现,大家可以自己摸索下,这里只提供个思路,整体和这节的例子差不多,只不过呢,要做成AppWidget。。。
- Notification小例子
- statusbar-notification小例子
- Notification入门小例子
- Android Notification使用小例子
- 截屏+notification的小例子
- Android通知Notification入门小例子(一)
- Notification通知 模拟下载 小例子
- Android Notification 例子
- Android notification 例子
- android Notification的例子
- Android Notification例子
- Android Notification 小Demo
- android之Notification的例子
- Notification简单观察者模式例子
- Android Notification的完整例子
- 小例子
- Android开发小知识-Notification
- 安卓Notification小总结
- internal in C#
- 【GLSL教程】(四)shder的简单示例
- XCode实用快捷键,谁用谁知道
- Linux Cache 机制探究
- 成为一名优秀程序员所需要知道的15件事
- Notification小例子
- RTC(实时钟)设备驱动(内核代码)
- 【转】Word 2007无法显示图片的问题
- 理解Java中的堆和栈
- 对c&c++源文件和头文件分开的好处的一点认识
- WIN32 透明贴图
- jquery zTree拖曳限制
- Linux内核中增加自己的驱动代码
- 定时通知(Notification)刷新实现SurfaceView双缓冲机制