美文网首页
RemoteViews的理解和应用

RemoteViews的理解和应用

作者: 特大碗牛肉面 | 来源:发表于2017-04-11 01:31 被阅读0次

    RemoteViews的介绍:

    RemoteViews是一种远程View, 可以在其他进程中显示,可以跨进程更新界面;RemoteViews不能支持所有的View类型,也不能支持自定义View, 只支持如下类型:

    layout:

    FrameLayout  LinearLayout  RelativeLayout  GridLayout

    View:

    AnalogClock, button, Chronometer, ImageButton, ImageView ,ProgressBar ,TextView,  ViewFlipper ListView , GridView ,StackVie,AdapterViewFlipper,ViewStub;

    RemoteViews没有提供findViewById方法;不能直接访问里面View的元素,必须要通过RemoteViews提供的set方法进行完成;

    RemoteViews的set方法

    对于点击事件 ,RemoteViews中只支持PendingIntent ,不支持onClicklistener

    RemoteViews在Android中的使用场所有两种:通知栏桌面小部件


    RemoteViews在通知栏上的应用:

    定义Notification,会使用默认的布局,如果要使用自定的布局,需要给notification.contentView = remoteView指定remoteview,然后通过remoteView去更新界面

    系统自带的布局:

    // 创建通知消息对象

    NotificationCompat.Builder builder = new NotificationCompat.Builder(YouRen.getContext());

    builder.setTicker("您有一条新消息。");// 弹出的提示

    builder.setContentTitle(appName);// 通知消息的标题

    builder.setContentText(content);// 通知消息的内容

    builder.setSmallIcon(smallIcon1);

    builder.setLargeIcon(appIcon);

    builder.setDefaults(Notification.DEFAULT_ALL);

    builder.setWhen(System.currentTimeMillis());

    builder.setAutoCancel(true); //注意不要设置setAutoCancel为true,否则监听器接收不到。

    PendingIntent contentIntent = PendingIntent.getBroadcast(this, NOTIFY_REQUEST_CODE, intent_bro, PendingIntent.FLAG_UPDATE_CURRENT);//第一个参数是当前的类 , 第二个参数默认是0,第三个是intent ,可以用于手动清除通知时发送广播 , 第四个pendingIntent的属性

    //显示通知

    NotificationManager manger = (NotificationManager)this.getSystemService(Context.NOTIFICATION_SERVICE);

    manger.notify((int) System.currentTimeMillis(), builder.build());

    自定义布局:

    自定义的消息通知栏


    RemoteViews在桌面小部件的应用:

    AppWidgetProvider 是Android用来实现桌面小部件的类;本质就是一个BroadcastReceiver, 实现功能需要继承AppWidgetProvider类,并重写onUpdate方法。AppWidgetProvider还有onEnabled,onDisabled,onDeleted以及onReceive ,而onReceive可以自动根据广播的Action来调用其余的几个方法。桌面小部件的更新也需要用到RemoteViews,更新方法主要是调用AppWidgetManager的updateAppWidget方法,传入appWidgetId跟RemoteViews。桌面小部件实现步骤如下:

    1定义小部件界面:

    layout下的布局

    2、定义小部件配置信息:


    xml文件夹下的配置信息

    3、定义小部件的实现类:


    上述方法可以进行删除,替换等操作 结合onreceive()

    4、在AndroidManifest.xml中声明小部件:


    两个action是自定义的

    第一个action用于识别小部件的单击行为;

    第二个action作为小部件的标识必须存在,这是系统的规范。


    PendingIntent的四个属性:

    FLAG_ONE_SHOT:

    在当前的pendingIntent中只能被调用一次 , 然后它就会被自动cencel , 如果后续还有相同的pendingIntent , 那么它们的send方法就会调用失败。如果用了这个属性 , 那么同类的通知栏只能使用一次 , 后续的通知栏单击后将无法打开。

    FLAG_NO_CREATE:

    如果当前系统中不存在相同的PendingIntent对象,系统将不会创建该PendingIntent对象而是直接返回null。(我没用过)

    FLAG_CANCEL_CURRENT:

    在当前的pendingIntent中如果已经存在 , 那么它们都会被cencel, 然后系统会创建一个新的pendingIntent 。对于通知栏中,那些被cencel的消息将无法打开。使用这个属性时你会发现,当你点击消息1时,没反应,当你点击第2条时就可以点击。

    FLAG_UPDATE_CURRENT:(用的比较多)

    在当前的pendingIntent中,如果已经存在那么它们都会被更新,即它们的intent中的extras会被替换成最新的;使用这个熟悉的时候 , 可以根据不同的变量来进行辩论,例如好友请求,判断是不是字段为“张三”,如果为张三,那么通知栏只会显示一条,否则会显示多条;

    相关文章

      网友评论

          本文标题:RemoteViews的理解和应用

          本文链接:https://www.haomeiwen.com/subject/acycattx.html