当前位置: 首页 > 编程日记 > 正文

Android 实时文件夹

实时文件夹是一种用来显示由某个ContentProvider提供的数据信息的桌面组件。要创建一个实时文件夹,必须要有两个方面的支持。

1,要定义一个用来创建实时文件夹的Activity。

2,所指定数据信息URI的ContentProvider必须支持实时文件夹时文件夹查询

一、定义创建实时文件夹的Activity

想在桌面长按后选择实时文件夹就会弹出一个可用实时文件夹的列表对话框,必须在应用程序内的Activity中添加一个Action为android.intent.action.CREATE_LIVE_FOLDER的IntentFilter。而在这个创建实时文件夹的Activity中,我们要把实时文件夹的信息以附加信息的形式存储在一个Intent对象当中。

Java代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3. package="com.studio.android.ch10.ex2"  
  4. android:versionCode="1"  
  5. android:versionName="1.0">  
  6. <application android:icon="@drawable/icon"   
  7. android:label="@string/app_name">  
  8. <activity android:name=".MyAllContacts"  
  9. android:label="@string/app_name">  
  10. <intent-filter>
  11. <action android:name=
  12. "android.intent.action.CREATE_LIVE_FOLDER" />  
  13. <category android:name=
  14. "android.intent.category.DEFAULT" />  
  15. </intent-filter>
  16. </activity>
  17. </application>
  18. <uses-sdk android:minSdkVersion="3" />  
  19. </manifest>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.studio.android.ch10.ex2"android:versionCode="1"android:versionName="1.0"><application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".MyAllContacts"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.CREATE_LIVE_FOLDER" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity></application><uses-sdk android:minSdkVersion="3" />
</manifest> 



由于Content的ContentProvider已经实现了对实时文件夹的相关支持

Java代码 复制代码 收藏代码
  1. import android.app.Activity;  
  2. import android.content.Intent;  
  3. import android.net.Uri;  
  4. import android.os.Bundle;  
  5. import android.provider.Contacts;  
  6. import android.provider.LiveFolders;  
  7. public class MyAllContacts extends Activity {  
  8. public static final Uri LIVE_FOLDER_URI =  
  9. Uri.parse("content://contacts/live_folders/people");  
  10. @Override  
  11. protected void onCreate(Bundle savedInstanceState) {  
  12. super.onCreate(savedInstanceState);  
  13. if (getIntent().getAction()  
  14. .equals(LiveFolders.ACTION_CREATE_LIVE_FOLDER)) {
  15. Intent intent = new Intent();  
  16. intent.setData(LIVE_FOLDER_URI);//在文件夹,对于要查询的URI则是以Data的形式存储在Intent对象中。Contacts的ContentProvider已经实现了对实时文件夹的相关支持。  
  17. intent.putExtra(
  18. LiveFolders.EXTRA_LIVE_FOLDER_BASE_INTENT,
  19. new Intent(Intent.ACTION_VIEW,  
  20. Contacts.People.CONTENT_URI));
  21. intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_NAME,
  22. "MyAllContacts");  
  23. intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_ICON,
  24. Intent.ShortcutIconResource.fromContext(this,  
  25. R.drawable.icon));
  26. intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE,
  27. LiveFolders.DISPLAY_MODE_LIST);//还可以设置LiveFolders.DISPLAY_MODE_LIST  
  28. setResult(RESULT_OK, intent);
  29. else {  
  30. setResult(RESULT_CANCELED);
  31. }
  32. finish();
  33. }
  34. }
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Contacts;
import android.provider.LiveFolders;public class MyAllContacts extends Activity {public static final Uri LIVE_FOLDER_URI =Uri.parse("content://contacts/live_folders/people");@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (getIntent().getAction().equals(LiveFolders.ACTION_CREATE_LIVE_FOLDER)) {Intent intent = new Intent();intent.setData(LIVE_FOLDER_URI);//在文件夹,对于要查询的URI则是以Data的形式存储在Intent对象中。Contacts的ContentProvider已经实现了对实时文件夹的相关支持。intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_BASE_INTENT,new Intent(Intent.ACTION_VIEW,Contacts.People.CONTENT_URI));intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_NAME,"MyAllContacts");intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_ICON,Intent.ShortcutIconResource.fromContext(this,R.drawable.icon));intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE, LiveFolders.DISPLAY_MODE_LIST);//还可以设置LiveFolders.DISPLAY_MODE_LISTsetResult(RESULT_OK, intent);} else {setResult(RESULT_CANCELED);}finish();}
}

二、定义支持实时文件夹的ContentProvider

要使一个ContentProvider支持实时文件夹的查询,主要要实现下面2个:

1,为实时文件夹查询定义一个专门的URI

2,在query查询方法中针对实时文件夹的路径进行相应的查询然后返回含有特定列名的Cursor



在CountryCode.java中

//为URI匹配器增加实时文件夹URI的匹配号码

public static final int LIVE_FOLDER = 3;

---

---

---

//定义实时文件夹的URI

public static final Uri LIVE_FOLDER_URI =

Uri.parse("content://" + AUTHORITY + "/livefolder");

在MyProvider.java中

static {

sMatcher = new UriMatcher(UriMatcher.NO_MATCH);

----

---

sMatcher.addURI(CountryCode.AUTHORITY,

"livefolder/", CountryCode.LIVE_FOLDER);

}

---

---

@Override

public Cursor query(Uri uri, String[] projection,

String selection, String[] args,String order) {

SQLiteDatabase db = dbHelper.getReadableDatabase();

Cursor c;

switch (sMatcher.match(uri)) {

----

case CountryCode.LIVE_FOLDER:

String[] myProjection = {

//注意更改别名

CountryCode.ID + " AS " + LiveFolders._ID,

CountryCode.COUNTRY + " AS " + LiveFolders.NAME,

CountryCode.CODE + " AS " + LiveFolders.DESCRIPTION

};

c = db.query(CountryCode.TB_NAME, myProjection, selection,

args,null,null,order);

break;

default:

throw new IllegalArgumentException("Unknown URI " + uri);

}

c.setNotificationUri(getContext().getContentResolver(), uri);

return c;

}

CreateLiveFolder.java中

import android.app.Activity;

Java代码 复制代码 收藏代码
  1. import android.content.Intent;  
  2. import android.os.Bundle;  
  3. import android.provider.LiveFolders;  
  4. public class CreateLiveFolder extends Activity {  
  5. @Override  
  6. protected void onCreate(Bundle savedInstanceState) {  
  7. super.onCreate(savedInstanceState);  
  8. if (getIntent().getAction()  
  9. .equals(LiveFolders.ACTION_CREATE_LIVE_FOLDER)) {
  10. Intent intent = new Intent();  
  11. intent.setData(CountryCode.LIVE_FOLDER_URI);
  12. intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_NAME,
  13. "CountryCode");  
  14. intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_ICON,
  15. Intent.ShortcutIconResource.fromContext(this,  
  16. R.drawable.icon));
  17. intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE,
  18. LiveFolders.DISPLAY_MODE_LIST);
  19. setResult(RESULT_OK, intent);
  20. else {  
  21. setResult(RESULT_CANCELED);
  22. }
  23. finish();
  24. }
  25. }
import android.content.Intent;
import android.os.Bundle;
import android.provider.LiveFolders;public class CreateLiveFolder extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (getIntent().getAction().equals(LiveFolders.ACTION_CREATE_LIVE_FOLDER)) {Intent intent = new Intent();intent.setData(CountryCode.LIVE_FOLDER_URI);intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_NAME,"CountryCode");intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_ICON,Intent.ShortcutIconResource.fromContext(this,R.drawable.icon));intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE, LiveFolders.DISPLAY_MODE_LIST);setResult(RESULT_OK, intent);} else {setResult(RESULT_CANCELED);}finish();}
}

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3. package="com.studio.android.chp10.ex3"  
  4. android:versionCode="1"  
  5. android:versionName="1.0.0">  
  6. <application android:icon="@drawable/icon" android:label="@string/app_name">  
  7. <activity android:name=".SQLite2"  
  8. android:label="@string/app_name">  
  9. <intent-filter>  
  10. <action android:name="android.intent.action.MAIN" />  
  11. <category android:name="android.intent.category.LAUNCHER" />  
  12. </intent-filter>  
  13. </activity>  
  14. <provider android:name="MyProvider"  
  15. android:authorities="com.studio.andriod.provider.countrycode" />  
  16. <activity android:name=".CreateLiveFolder">  
  17. <intent-filter>  
  18. <action android:name=  
  19. "android.intent.action.CREATE_LIVE_FOLDER" />  
  20. <category android:name=  
  21. "android.intent.category.DEFAULT" />  
  22. </intent-filter>  
  23. </activity>  
  24. </application>  
  25. </manifest>   

转载于:https://www.cnblogs.com/xiaochao1234/p/4241899.html

相关文章:

《新程序员002》图书正式上市! 从“新数据库时代”到“软件定义汽车”

20年前&#xff0c;伴随着互联网打开信息化大门&#xff0c;技术人成为新时代的开拓者。在时代的召唤下&#xff0c;CSDN于2001年推出国内首个面向IT人员的专业杂志——《程序员》&#xff0c;成为一代代开发者的技术启蒙。20年后的今天&#xff0c;人工智能、云计算、大数据等…

Xtrabackup bug记录

xtrabackup 2.1.2 2.1.3 均出现以下问题&#xff1a; 123xtrabackup: warning: Log block checksum mismatch (block no 191401143 at lsn 3946288081920):expected 800836998, calculated checksum 800832263xtrabackup: warning: this is possible when the log block has n…

RHEL5上配置VNCSERVER

VNC一个远程显示系统&#xff0c;管理员通过它不仅仅可以在运行程序的本地机上察看桌面环境&#xff0c;而且可以从 Internet上的任何地方察看远程机器的运行情况&#xff0c;而且它具有跨平台的特性。 Linux 要使用远程桌面需要安装VNC&#xff0c;Centos5,RHCE5 已经自带了VN…

勒索软件层出不穷,Veeam “3-2-1-1-0”助力构建数据防护

随着 AI、IoT、云原生等前沿技术的发展&#xff0c;近年来勒索病毒的攻击手段不断升级&#xff0c;赎金也越来越高&#xff1a;例如今年美国最大燃油管道受攻击导致美国17个州和华盛顿特区进入紧急状态&#xff0c;2020 年 Ripple20 0day 漏洞曝光&#xff0c;波及数亿台联网设…

大数据架构和模式(一)——大数据分类和架构简介

概述 大数据可通过许多方式来存储、获取、处理和分析。每个大数据来源都有不同的特征&#xff0c;包括数据的频率、量、速度、类型和真实性。处理并存储大数据时&#xff0c;会涉及到更多维度&#xff0c;比如治理、安全性和策略。选择一种架构并构建合适的大数据解决方案极具挑…

Windows 7 开发新特性

10月25日在西安举行的Windows 7 社区发布活动中我讲了Session1 -- Windows 7 概览。参会的人员达到62人&#xff0c;这个参加人数超过了我的预期,非常开心. 主要讲了一下内容: 一 构建于稳固的基础平台 1 . 改进的基础平台 兼容性: 兼容基于Windows Vista构建的应用程序与设备 …

GitHub 的 AI 编程工具漏洞高达 40% ,再次陷入争议……

整理 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 在近日发表的一篇论文中&#xff0c;研究人员对 GitHub Copilot 人工智能编程辅助工具进行了深入调查。结果发现&#xff0c;仍处于测试预览阶段的 Copilot 具有高达 40% 的错误代码率&#xff0c;意味…

centos中mysql重置密码

1 . 用空密码方式使用root用户登录 MySQL&#xff1b; mysql -u root 2. 修改root用户的密码&#xff1b; mysql> update mysql.user set passwordPASSWORD(’新密码’) where User’root’; mysql> flush privileges; mysql> quit 3. 重新启动MySQL&#xff…

Centos 内存占满 释放内存

2019独角兽企业重金招聘Python工程师标准>>> 一台服务器&#xff0c;今天用 free -m 查看&#xff0c;发现内存跑满了。 再 top&#xff0c;然后按下shiftm&#xff0c;也就是按内存占用百分比排序&#xff0c;发现排在第一的进程&#xff0c;才占用0.9%&#xff0c…

Android开发实践:为什么要继承onMeasure()

首先&#xff0c;我们写一个自定义View&#xff0c;直接调用系统默认的onMeasure函数&#xff0c;看看会是怎样的现象&#xff1a; 12345678910111213141516171819202122package com.titcktick.customview; import android.content.Context; import android.util.AttributeSet;…

Android_CodeWiki_01

记录常用代码片&#xff0c;以备不时之需..wkakak&#xff0c;开始&#xff1a; 1、 精确获取屏幕尺寸&#xff08;例如&#xff1a;3.5、4.0、5.0寸屏幕&#xff09; 1 public static double getScreenPhysicalSize(Activity ctx) { 2 DisplayMetrics dm new Displ…

centos vnc配置笔记

1.首先查询是否安装VNC Serverrpm -qa |grep vnc如果有类似于&#xff1a;vnc-server-的值返回说明已经安装了vnc-server如果没有安装采用yum安装yum -y install vnc2.配置VNC用户如果以root登录的话&#xff0c;输入vncpasswd Password:Verify:设置root用户的VNC登录用户名和密…

普通大学生和大厂的距离有多长?

随着夏季的离去&#xff0c;金九银十招聘季已经悄然而至&#xff0c;现在正处于大厂招聘高峰期&#xff0c;是找工作的好时机。对于程序员这个行业来说&#xff0c;进大厂意味着高工资、高福利以及巨大的晋升空间&#xff0c;这是普通公司无法提供的&#xff0c;因此&#xff0…

ovirt官方安装文档 附录F

附录F&#xff1a;在单独的机器上安装Websocket代理 websocket代理允许用户通过noVNC和SPICE HTML5控制台连接到虚拟机。noVNC客户端使用websocket传递VNC数据。但是&#xff0c;QEMU中的VNC服务器不提供websocket支持&#xff0c;因此必须在客户端和VNC服务器之间放置一个webs…

CentOS重启启动Apache,VNC

centos 重启 apache #service httpd restart 重启 VNC #service vncserver restart 重启mysql # /etc/init.d/mysqld start 重启nginx #/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

调侃 -- 刚入职时的单纯

借个漫画调侃下刚入职时傻傻的想法当然也不是说排斥加班&#xff0c;既然选择了这个行业&#xff0c;也做好了加班的准备还好现在的公司不怎么加班&#xff0c;相比某些企业简直不能算是加班对于哪些上班好几年的老员工&#xff0c;下班后仍能坚持在工位上做下去&#xff0c;我…

AI市场扩大催生多样化标注需求

爱数智慧创始人兼CEO张晴晴在服贸会论坛上做主题分享 9月3日&#xff0c;由中国信通院云计算与大数据研究所&#xff0c;亚太工程组织联合会主办的《2021中国智能产业论坛》在2021服贸会上成功举办&#xff0c;论坛现场&#xff0c;北京爱数智慧创始人兼CEO张晴晴做《多模态标…

五、DNS与bind

DNS服务可以为用户提供域名和IP之间的自动转换。通过DNS&#xff0c;用户只需输入机器的域名即可访问相关的服务&#xff0c;而无需使用那些难以记忆的IP地址。DNS帮助用户在互联网上寻找路径&#xff0c;在互联网上的每一个计算机都拥有一个唯一的地址&#xff0c;称作IP地址。…

Nutch 二次开发之parse正文内容

关于nutch的基础知识能够參考lemo的专栏 nutch支持二次开发&#xff0c;为了满足搜索的准确率的问题&#xff0c;考虑只将网页正文的内容提取出来作为索引的内容&#xff0c;相应的是parse_text的数据。我使用的事nutch1.4 版本号&#xff0c;在cygwin下运行crawl命令进行爬取。…

翼方健数曹华:构建数据和计算互联网的必由之路

智能时代&#xff0c;数据无疑是最活跃的生产要素&#xff0c;它将决定未来的生产力和生产关系。其中&#xff0c;共享和保护数据&#xff0c;促进数据流通&#xff0c;并最大化数据价值是业内技术发展所关注的焦点。 诞生在这一背景下的隐私计算技术正在蓬勃发展&#xff0c;…

vi常用命令以及 冒号输入

按i进入输入模式 输入: 按ESC结束输入 按:w保存退出 pageup上翻页 pagedown下翻页 :w保存 :q!不保存 :wq保存离开 i o a编辑模式 ESC一般模式 dd 删除光标所在整行 yy 复制光标所在整行

Zabbix(六):项目实战之--自动发现nginx调度器及后端web服务集群、自定义参数监控...

项目&#xff1a; 1.自动发现nginx调度器及后端apache构建的web服务集群&#xff1b; 2.使用自定义参数监控调度器上nginx服务的相关统计数据及速率数据&#xff1b; 3.使用自定义参数监控后端apache服务的相关统计数据及速率数据&#xff1b;(选做) 4.制定出nginx调度器及后端…

ONNX 浅析:如何加速深度学习算法工程化?

AlphaGo击败围棋世界冠军李世石以来&#xff0c;关于人工智能和深度学习的研究呈现井喷之势。各种新的算法和网络模型层出不穷&#xff0c;令人眼花缭乱。与之相随的&#xff0c;深度学习的训练和推理框架也在不断的推陈出新&#xff0c;比较著名的有&#xff1a;微软的CNTK、G…

如何在OS X中打印到PDF文件

如何在OS X中打印文件到PDF文件&#xff1f;其实不需要安装任何其他软件&#xff0c;OS X本身支持打印到PDF文件这个功能。具体操作详见下面文章&#xff1a;Want to save a document or web page as a PDF file, but you don’t own Adobe Acrobat? No problem, you can prin…

Joomla和Drupal简介

Joomla!是一套在国外相当知名的内容管理系统。Joomla!是使用PHP语言加上MySQL数据库所开发的软件系统&#xff0c;可以在Linux、 Windows、MacOSX等各种不同的平台上执行。目前是由Open Source Matters&#xff08;见扩展阅读&#xff09;这个开放源码组织进行开发与支持&#…

AD RMS高可用(三)部署RMS根群集服务器

1) 在rms服务器上点击“添加角色和功能”&#xff0c;开始rms组件的添加 2) 选择“基于角色或基于功能安装”&#xff0c;点击”下一步“。 3) 选择第一台rms服务&#xff0c;点击”下一步“。 4) 勾选”ADRMS”角色&#xff0c;同时会添加iis服务。点击”下一步“。 5) 保持默…

AI 复活「她」! GPT-3 帮美国小哥复刻逝去未婚妻,但又夺走她……

整理 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 今年 7 月&#xff0c;一名33岁的美国小哥 Joshua Barbeau 在未婚妻去世后&#xff0c;根据她在 Facebook 和 twitter 上的文本在另一名开发人员的帮助下成功在 GPT-3 上微调&#xff0c;能够复刻出未…

centOS怎样强制卸载PHP以及自定义安装PHP

这个是原创的&#xff0c;当然也是在前人的基础上&#xff0c;自己留个拷贝&#xff0c;其他人也不用再摸索了。 转载请保留版权信息谢谢&#xff1a;http://blog.csdn.net/21aspnet/ 很无语&#xff0c;centOS居然php版本才5.1.6&#xff0c;很多开源的CMS无法安装。 查看ph…

深入掌握JMS(一):JMS基础

2019独角兽企业重金招聘Python工程师标准>>> 1. JMS基本概念 JMS(Java Message Service) 即Java消息服务。它提供标准的产生、发送、接收消息的接口简化企业 应用的开发。它支持两种消息通信模型&#xff1a;点到点&#xff08;point-to-point&#xff09;&a…

浏览器前进后退对下拉框数据的丢失(省市联动实现和例子)

浏览器前进后退对下拉框数据的丢失的问题&#xff0c;典型的为省市下拉框联动时城市数据的丢失。省市联动一般的实现为城市在省份的选择后js加载。 那么每次城市的改变只需要重新加载新的城市数据并更新下拉框即可&#xff1a; 下拉函数 function ReloadCities() { var $ddlCit…