Android RemoteViews(Android开发艺术随笔)

原创 2015年11月18日 11:26:31

RemoteViews是一种远程View。RemoteViews表示是一个View结构,它可以在其他进程中显示,由于他在其他进程中显示,为了能够更新他的界面,RemoteViews提供了一组基础操作用于跨进程更新他的界面。

  • 在通知栏上的作用
    • 普通的通知栏
    • 自定义通知栏
Intent intent = new Intent(this,MainActivity.class);
        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                Notification notification = new Notification.Builder(this)
                        .setTicker("hello world")
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setWhen(System.currentTimeMillis())
                        .setContentTitle("normal_notifycation")
                        .setContentText("this is normal_notifycation")
                        .setContentIntent(pendingIntent)
                        .setAutoCancel(true)
                        .build();

                manager.notify(1,notification);

普通的通知栏很简单,可以看到,Notification也是一种建造者模式。这个以后会说到。

那么来说下remoteviews自定义通知栏用法。

Notification notification1 = new Notification();

                notification1.icon = R.mipmap.ic_launcher;
                notification1.tickerText = "remoteview";
                notification1.when = System.currentTimeMillis();
                notification1.flags = Notification.FLAG_AUTO_CANCEL;


                RemoteViews remoteViews = new RemoteViews(getPackageName(),R.layout.layout_notifycation);
                remoteViews.setTextViewText(R.id.msg, "remoteviews text");
                remoteViews.setTextViewText(R.id.open_activity2, "click me");
                remoteViews.setImageViewResource(R.id.icon, R.mipmap.ic_launcher);
                PendingIntent pendingIntent1 = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                remoteViews.setOnClickPendingIntent(R.id.open_activity2, pendingIntent1);
                notification1.contentView = remoteViews;
                notification1.contentIntent = pendingIntent1;
                manager.notify(2,notification1);

大致代码就是这样,不过在这里我要说明几点:

  1. 在5.1手机上,上面代码是不会显示文字的,为什么呢,因为默认的字体颜色是白色,而通知栏背景是白色,这样就导致看不见了。所以我们需要自己根据需求去设置;
  2. romoteviews提供了set….的方法,根据需求去设置

  • RemoteView在桌面小部件上的应用

使用步奏:

  1. 定义小部件界面
    在res/layout下面新建xml布局文件
  2. 定义小部件配置信息
    在res/xml中新建xml文件,用来配置
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialLayout="@layout/widget"
    android:minHeight="84dp"
    android:minWidth="84dp"
    android:updatePeriodMillis="86400000"
    >

</appwidget-provider>

有哪些属性可用呢,看下图,属性的含义就不具体说了。图上很明白
可用属性图
3. 定义小部件实现类
实现类要继承AppWidgetProvider类,这个类就是BroadcastReceiver的子类。这个如下

方法名一步了然,就不多少了,需要的去看任玉刚
4. 在manifast中配置

<receiver android:name=".MyAppWidgetProvider">
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/appwidget_provider_info">

            </meta-data>
            <intent-filter>
                <action android:name="com.gl.action.CLICK"/>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
            </intent-filter>
        </receiver>

按上面代码的格式配置就好。这里给出郭神的一个链接小火箭传送门


  • PendingIntent
    PendingIntent表示一种意图,不是立刻发生,是在将来某个时候发生的Intent。
    • getActivity
    • getService
    • getBroadcast
      通过上面3中方法来获取对应的PendingIntent。

PendingIntent的匹配规则:
如果两个PendingIntent他们内部的Intent相同并且requestCode也相同,那么这两个PendingIntent就是相同的。Intent相同的规则是:ComponentName和intent-filter都相同。
关于4种flag,看书或者文档。


  • RemoteViews的内部机制
    关于源码分析,我就不敢羞人现眼了。
版权声明:个人博客地址 http://guolei1130.github.io/

Android开发艺术探索读书笔记(二)

首先感谢大家支持,昨天第一篇写出来之后反响很好,主席本人也非常赞赏(捂脸~),再接再厉,推出第二篇。这篇的主要内容是对两章View的内容进行总结。不得不说,自定义View是很多开发者的痛点,一方面我们...
  • amurocrash
  • amurocrash
  • 2015年09月25日 13:48
  • 10936

一个规范的自定义View——Android开发艺术探索笔记

如何定义一个规范的自定义View
  • L664675249
  • L664675249
  • 2016年03月03日 13:58
  • 2054

Android开发艺术探索读书笔记(一)

首先向各位严重推荐主席这本书《Android开发艺术探索》。     再感谢主席邀请写这篇读书笔记 + 书评。书已经完整的翻完一遍了,但是还没有细致的品读并run代码,最近有时间正好系统的把整本书从内...
  • amurocrash
  • amurocrash
  • 2015年09月24日 18:34
  • 8072

第五章理解RemoteViews(Android开发艺术探索)

5.1、remoteViews的应用(主要用于通知栏和桌面小部件) 通知栏和桌面小部件不能直接去更新view,因为2者的页面都运行在其他进程中,确切来说是系统的SystemServer进程,为了跨...
  • u013277740
  • u013277740
  • 2017年03月13日 18:03
  • 350

Android开发艺术探索 第5章 理解RemoteViews 读书笔记

RemoteViews是一种远程View,可以在其他进程中显示,为了能够更新它的界面,RemoteViews提供了一组基础操作用于跨进程更新它的界面。 本章会介绍RemoteViews在通知栏和桌面...
  • bfboys
  • bfboys
  • 2016年09月23日 16:48
  • 173

《Android开发艺术探索》读书笔记 (5) 第5章 理解RemoteViews

第5章 理解RemoteViews      RemoteView能够实现跨进程更新界面,RemoteView在Android中的使用场景有两种:通知栏和桌面小部件 5.1 RemoteViews的应...
  • lijinhua7602
  • lijinhua7602
  • 2016年03月06日 23:47
  • 222

理解RemoteViews(Android开发艺术探索读书笔记)

RemoteView在通知栏上的应用 NotificationRemoteViews在桌面小部件上的应用AppWidgetProvider(继承自BroadcastReceiver) 组件代码声明...
  • jaggie
  • jaggie
  • 2017年01月12日 17:25
  • 121

《Android开发艺术探索》之学习笔记(五)理解RemoteViews

RemoteViews的应用RemoteViews表示的是一个View结构,它可以在其他进程中显示。RemoteViews在通知栏的应用通过RemoteViews加载布局文件可以实现自定义通知效果。更...
  • tgzzl
  • tgzzl
  • 2016年08月13日 16:14
  • 314

Android JNI开发流程(android开发艺术探索随笔)

今天来了兴趣想更搞下JNI,于是乎拿起任玉刚的Android开发艺术看了会,看起来挺简单的,但是做的时候各种问题。经过自己的努力,也算是弄好了。那么就来和大家分享下。 这篇博客的所用的是Ubuntu...
  • qq_21430549
  • qq_21430549
  • 2015年10月31日 19:18
  • 946

Android view的工作原理(Android开发艺术探索随笔)

ViewRoot ViewRoot对应的实现类是ViewRootImpl类,他是连接WindowManager和DecorView的纽带,view的三大 流程均是通过ViewRoot来完成的。在Ac...
  • qq_21430549
  • qq_21430549
  • 2015年11月14日 16:12
  • 1065
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android RemoteViews(Android开发艺术随笔)
举报原因:
原因补充:

(最多只允许输入30个字)