项目有个需求,需要在发送Notification的时候动态给定url的图片。大概思路如下:自己定义一个Notification的布局文件,这样能够很方便设置View的属性。

首先加载网络图片,使用BitmapFactory.decodeStream解析出Bitmap,然后,设置到自定义布局文件中的ImageView上。

自定义通知栏Notification布局如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent" >
  5. <ImageView
  6. android:id="@+id/image"
  7. android:layout_width="45dip"
  8. android:layout_height="45dip"
  9. android:layout_alignParentLeft="true"
  10. android:layout_marginBottom="8.0dip"
  11. android:layout_marginLeft="8.0dip"
  12. android:layout_marginRight="10dp"
  13. android:layout_marginTop="8.0dip" />
  14. <TextView
  15. android:id="@+id/title"
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content"
  18. android:layout_marginTop="8.0dip"
  19. android:layout_toRightOf="@id/image"
  20. android:textSize="16.0dip" />
  21. <TextView
  22. android:id="@+id/text"
  23. android:layout_width="wrap_content"
  24. android:layout_height="wrap_content"
  25. android:layout_below="@id/title"
  26. android:layout_marginTop="3.0dip"
  27. android:layout_toRightOf="@id/image"
  28. android:textSize="16.0dip" />
  29. <TextView
  30. android:id="@+id/time"
  31. android:layout_width="wrap_content"
  32. android:layout_height="wrap_content"
  33. android:layout_alignParentRight="true"
  34. android:layout_centerVertical="true"
  35. android:layout_marginRight="8.0dip"
  36. android:textSize="16.0dip" />
  37. </RelativeLayout>

android代码:

  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.net.HttpURLConnection;
  4. import java.net.MalformedURLException;
  5. import java.net.URL;
  6. import android.app.Activity;
  7. import android.app.Notification;
  8. import android.app.NotificationManager;
  9. import android.app.PendingIntent;
  10. import android.content.Context;
  11. import android.content.Intent;
  12. import android.graphics.Bitmap;
  13. import android.graphics.BitmapFactory;
  14. import android.os.AsyncTask;
  15. import android.os.Bundle;
  16. import android.view.View;
  17. import android.view.View.OnClickListener;
  18. import android.widget.RemoteViews;
  19. public class MainActivity extends Activity {
  20. private String url = "http://www.takungpao.com/world/content/image/attachement/jpg/site2/20120605/d4bed9b92d221137df0511.jpg";
  21. @Override
  22. protected void onCreate(Bundle savedInstanceState) {
  23. super.onCreate(savedInstanceState);
  24. setContentView(R.layout.activity_main);
  25. findViewById(R.id.btn).setOnClickListener(new OnClickListener() {
  26. @Override
  27. public void onClick(View v) {
  28. set(url);
  29. }
  30. });
  31. }
  32. public void set(String urlStr) {
  33. new AsyncTask<String, Void, Bitmap>() {
  34. @Override
  35. protected Bitmap doInBackground(String... params) {
  36. try {
  37. URL url = new URL(params[0]);
  38. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  39. conn.setConnectTimeout(6000);//设置超时
  40. conn.setDoInput(true);
  41. conn.setUseCaches(false);//不缓存
  42. conn.connect();
  43. int code = conn.getResponseCode();
  44. Bitmap bitmap = null;
  45. if(code==200) {
  46. InputStream is = conn.getInputStream();//获得图片的数据流
  47. bitmap = BitmapFactory.decodeStream(is);
  48. }
  49. return bitmap;
  50. } catch (MalformedURLException e) {
  51. e.printStackTrace();
  52. return null;
  53. } catch (IOException e) {
  54. e.printStackTrace();
  55. return null;
  56. }
  57. }
  58. @Override
  59. protected void onPostExecute(Bitmap result) {
  60. super.onPostExecute(result);
  61. if (result != null) {
  62. showNotification(result);
  63. }
  64. }
  65. }.execute(urlStr);
  66. }
  67. private void showNotification(Bitmap bitmap){
  68. NotificationManager manager = (NotificationManager) MainActivity.this
  69. .getSystemService(Context.NOTIFICATION_SERVICE);
  70. Notification noti = new Notification();
  71. noti.flags = Notification.FLAG_AUTO_CANCEL;
  72. noti.icon = R.drawable.ic_launcher;
  73. // 1、创建一个自定义的消息布局 notification.xml
  74. // 2、在程序代码中使用RemoteViews的方法来定义image和text。然后把RemoteViews对象传到contentView字段
  75. RemoteViews rv = new RemoteViews(this.getPackageName(),
  76. R.layout.cus_noti);
  77. rv.setImageViewResource(R.id.image,
  78. R.drawable.ic_launcher);
  79. rv.setImageViewBitmap(R.id.image, bitmap);
  80. rv.setTextViewText(R.id.text,
  81. "Hello,this message is in a custom expanded view");
  82. noti.contentView = rv;
  83. // 3、为Notification的contentIntent字段定义一个Intent(注意,使用自定义View不需要setLatestEventInfo()方法)
  84. // 这儿点击后简答启动Settings模块
  85. PendingIntent contentIntent = PendingIntent.getActivity
  86. (MainActivity.this, 0,new
  87. Intent("android.settings.SETTINGS"), 0);
  88. noti.contentIntent = contentIntent;
  89. manager.notify(1, noti);
  90. }
  91. }

android自定义Notification通知栏实例的更多相关文章

  1. Android自定义Notification并没有那么简单

    背景 最近需要实现一个自定义Notification的功能.网上找了找代码,解决方案就是通过RemoteViews来实现.但是在实现过程中遇到不少问题,网上也没有很好的文章描述这些问题,所以在这里做个 ...

  2. android 自定义通知栏

    package com.example.mvp; import cn.ljuns.temperature.view.TemperatureView;import presenter.ILoginPre ...

  3. Android -- 系统和自定义Notification

    Notification是一种让你的应用程序在不使用Activity的情况下警示用户,Notification是看不见的程序组件警示用户有需要注意的事件发生的最好途径. 作为UI部分,Notifica ...

  4. Android学习(二十)Notification通知栏

    一.通知栏的内容 1.图标 2.标题 3.内容 4.时间 5.点击后的相应 二.如何实现通知栏 1.获取NotificationManager. 2.显示通知栏:notify(id,notificat ...

  5. Android Notification通知栏使用

    package com.example.mynotifycation; import android.app.Activity; import android.app.Notification; im ...

  6. Android开发——Notification通知的使用及NotificationCopat.Builder常用设置API

    想要看全部设置的请看这一篇 [转]NotificationCopat.Builder全部设置 常用设置: 设置属性 说明 setAutoCancel(boolean autocancel) 设置点击信 ...

  7. android的消息通知栏

    在android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等. ...

  8. Android开发——Notification通知的各种Style详解

    本来是想与之前讲解使用Notification通知使用一起写的,查看了资料,觉得有必要将这Style部分单独拿出来讲解 前篇:Android开发——Notification通知的使用及Notifica ...

  9. android拾遗——Android之Notification和NotificationManager

    1.使用系统自带的Notification //创建一个NotificationManager的引用 String ns = Context.NOTIFICATION_SERVICE; Notific ...

随机推荐

  1. c# 事件路由器

    事件转发 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys ...

  2. Centos7 动态创建文件系统

    linux 想要动态扩展文件系统,需要将磁盘做成LVM动态卷   以centos 7为例 挂载两块磁盘 vdb vdc     安装 ssm 管理磁盘工具   yum -y install syste ...

  3. zookeeper 实现分布式锁zookeeper 使用 Curator 示例监听、分布式锁

    下载地址: http://download.csdn.net/download/ttyyadd/10239642

  4. Python CRM项目六

    自定义Django Admin的action 在Django Admin中,可以通过action来自定义一些操作,其中默认的action的功能是选中多条数据来进行删除操作 我们在king_admin中 ...

  5. SQL Server中计算表达式的和

    项目使用的是SQL Server数据库,需要做一个审核规则,字段A中表达式的值和字段B中的值,做比较: 需求本身很简单,但是表达式中存在很多非法字符(非法全角,运算符,汉字--) eg:1.1.1*2 ...

  6. Yii的Relational Active Record三张表连接查询

    需求如下: 查询book表信息,同时关联entitystags表,以entitystags的字段eid关联book的主键,再关联查询tags表,以entitystags表的tid字段关联tags表的主 ...

  7. 【Oracle】-初识PL/SQL

    在最近的工作中要用到存储过程和函数,索性把PL/SQL整体的看一下.之前看过基本书和园子里的博文,在这里将所学简单总结. 一.基本语句 1.大小写 2.分隔符  --  : 3.引用字符串  --   ...

  8. Sql server 卸载方法

    sql server不正确卸载时,重新安装会失败,会提示各种错误:如数据库实例已存在等... 下面是我摸索总结出来的卸载方法,以及重装失败后的处理方法: 卸载方法: 注意:SQL Server 200 ...

  9. Bruce Eckel的资源

    1 GitHub的技术博客 2 On Java 8 – Bruce Eckel 3 artima_weblogs - Bruce Eckel 4 back issues 5 eckel-oo-prog ...

  10. ps通道抠章

    1. 打开图片 2. 使用椭圆形选框工具,选择章所在范围(ALT+SHITF+鼠标左键) 3.复制图层(CTRL+J)为图层1,隐藏背景 4.进入通道,选择对比度最大的通道,复制通道副本 5.反选(C ...