项目有个需求,需要在发送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. Win10图片打开方式没有“Windows照片查看器”,如何找回?

    如果你是全新安装的Win10正式版,那么就会发现当在图片上点击右键时,"打开方式"菜单里熟悉的"Windows照片查看器"不见了,换成了Win10全新的&quo ...

  2. SpringMVC实现PUT请求上传文件

    在JQuery中,我们可以进行REST ful中delete和put的请求,但是在java EE标准中,默认只有在POST请求的时候,servlet 才会通过getparameter()方法取得请求体 ...

  3. Prime - 程序员的修养

    求质数算法的N种境界 求质数算法的N种境界[1] - 试除法和初级筛法 过程 尽管题目并没有要我们写一个最优的算法,但是身为一个程序员,优化应该是一种习惯,在编程的过程中,随着思考进行优化. 如果你只 ...

  4. java Object类是可以接收集合类型的

    废话不多说,上代码: package com.core.test; import java.util.ArrayList; import java.util.HashMap; import java. ...

  5. js发展历史

    1992年Nombas开发和醋C-minus-minus(c--),的嵌入式脚本语言,最初是绑定在Cenvi软件中,后将其改名scriptEase(客户端执行的语言) Netscape 接受Nomba ...

  6. IOS 时间字符串转换时间戳失败问题

    链接:https://pan.baidu.com/s/1nw6VWoD 密码:1peh 有时候获取到的时间带有毫秒数或者是(2018-2-6 11:11:11)格式的(别说你没遇到过,也别什么都让后台 ...

  7. Keepalived+LVS 实现高负载均衡Web集群

    一.原理及简介: 1.1 Keepalived简介      Keepalived是Linux下一个轻量级别的高可用解决方案.Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节 ...

  8. 02_Python基本数据类型

    一.什么是数据 数据是描述客观事物的字符(比如95,不同的语义可表示成绩或体重),是计算机可以操作的对象,能够被计算机识别并输入给计算机处理的符号集合. 数据不仅仅包含整形,还包括图像.音乐.视频等非 ...

  9. javase学习小结三

    格式标识符: System.out.printf("%d,%f,%5d,%-9.4f,%%,%13e",67,78.9,89,78.9,567.345); 输出结果为:67,78. ...

  10. 利用 secureCRT 直接上传下载文件 (sz,rz)

    在window下向linux传送文件的方法. 首先在window中安装SecureCRT,然后在快速连接中建立一个到linux的连接,当然,你要先知道你的系统的ip,在终端中键入ifconfig可以查 ...