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/

相关文章推荐

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

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

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

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

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

RemoteView在通知栏上的应用 NotificationRemoteViews在桌面小部件上的应用AppWidgetProvider(继承自BroadcastReceiver) 组件代码声明...

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

ViewRoot ViewRoot对应的实现类是ViewRootImpl类,他是连接WindowManager和DecorView的纽带,view的三大 流程均是通过ViewRoot来完成的。在Ac...

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

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

Android IPC之Messenger和AIDL(android开发艺术探索随笔)

最近感觉自己越来越菜,感觉自己什么都懂一点点,什么也不会。于是决定静下心来学习学习。所以,从看开发艺术说起。今天重新看了看第二章,感觉有了不一样的收获。那么今天就来记录下。 Messenger,信使...

android艺术开发探索之RemoteViews跨进程更新UI

android艺术开发探索之RemoteViews跨进程更新UIRemoteViews表示的是一个view结构,它提供了一组基础的操作用于跨进程更新它的界面,常见的应用场景是通知栏和桌面小部件。在学习...

Android 开发艺术探索笔记 第五章 理解RemoteViews

RemoteViews的应用 RemoteViews在实际开发中,主要用在通知栏和桌面小部件的开发过程中。通知栏通过NotificationManager的notify实现的,桌面小部件则是通过A...

android开发随笔 RelativeLayout

RelativeLayout 相对布局 此容器内的子元素可以使用彼此之间的相对位置或者和容器间的相对位置来进行定位。不能在RelativeLayout容器本身和他的子元素之间产生循环依赖,如:A要在B...

Android开发随笔

有很多人不明白Neon和Cortex A8, A9 的区别和联系,这里简单的说一下做一个记录。 Neon是ArmV7架构的CPU引入的一个指令集合。 ArmV7是ARMCPU架构的演变版本...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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