Android桌面组件开发之实时文件夹(Live_Folders)
来源:互联网 发布:mysql数据库设计案例 编辑:程序博客网 时间:2024/04/30 09:51
转自:http://zhangkun716717-126-com.iteye.com/blog/813059
实时文件夹是一种用来显示由某个ContentProvider提供的数据信息的桌面组件。要创建一个实时文件夹,必须要有两方面的支持。一方面是,要定义一个用来创建实时文件夹的Activity。另一方面是,所指定数据信息URI的ContentProvider必须支持实时文件夹的查询。本节中就将要介绍如何为应用程序创建实时文件夹。
与在Launcher的桌面上添加一个快捷方式类似,用户在桌面上长按后选择实时文件夹就会弹出一个可用实时文件夹的列表对话框。若我们想把自己应用程序内的Activity也添加到这一列表中,同样只需要在该Activity注册时添加一个Action为android.intent.action.CREATE_LIVE_FOLDER的IntentFilter。而在这个创建实时文件夹的Activity中,我们要把实时文件夹的信息以附加信息的形式存储在一个Intent对象当中,并通过Result返回给Launcher应用程序执行添加。下表列出了与实时文件夹信息相关的附件信息的键值与数据类型。
实时文件夹的键值与数据类型
其中DISPLAY_MODE有两种,其值为1时,以栅格(Grid)形式显示展开后的实时文件夹内容,为2时则是以列表(List)形式显示。除了以上的附加信息,对于要查询数据的URI则是以Data的形式存储在Intent对象中的。由于Contacts的ContentProvider已经实现了对实时文件夹的相关支持,所以下面我们就以创建所有联系人的实时文件夹的程序来作为本节的示例。
首先新建项目MyAllContacts,编辑AndroidManifest.xml,设置MyAllContacts这个Activity为添加实时文件夹的Activity。
MyAllContacts.java文件代码:
package com.myAllContacts.test; 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"); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /*if (getIntent().getAction().equals( * 我认为这里无需判断,既然已经在AndroidMainfest.xml文件里配置了,如若能打开这个Activity, * 证明这个判断就通过,这里就多此一举。 LiveFolders.ACTION_CREATE_LIVE_FOLDER)) {*/ Intent intent = new Intent(); intent.setData(LIVE_FOLDER_URI); intent .putExtra(LiveFolders.EXTRA_LIVE_FOLDER_NAME, "MyAllContacts"); intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_BASE_INTENT, new Intent(Intent.ACTION_VIEW, ContactsContract.Contacts.CONTENT_URI)); intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_ICON, Intent.ShortcutIconResource.fromContext(this, R.drawable.my_icon)); intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE, LiveFolders.DISPLAY_MODE_LIST); setResult(RESULT_OK, intent); /*} else {*/ //setResult(RESULT_CANCELED); //} finish(); } }
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.myAllContacts.test" 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="8" /> </manifest>
要说明的是android.intent.extra.livefolder.BASE_INTENT这一附加信息,它的值是一个Intent对象。在用户单击展开实时文件夹后的选项时,首先该Intent对象的Data中的URI会附加上所点选项的ID,然后传入Launcher调用的startActivity方法中以启动所期望的Activity。这里我们把BASE_INTENT设置成了Action为android.intent.action.View、URI为content://contacts/people/的Intent对象。这样假如我们在展开的实时文件夹上单击了ID为2的选项,就会启动查看URI为content://contacts/people/2的Activity。最后的效果如下图:
- Android桌面组件开发之实时文件夹(Live_Folders)
- Android桌面组件开发之实时文件夹(Live_Folders)
- Android桌面组件开发之实时文件夹(Live_Folders)
- 【android学习之十七】——特色功能2:桌面组件(快捷方式,实时文件夹)
- Android桌面组件开发之桌面快捷方式(一)
- Android桌面组件开发之桌面快捷方式(二)
- Android特色开发之桌面组件
- Android特色开发之桌面组件
- android桌面组件开发
- Android--桌面组件开发
- android桌面组件开发
- Android widget 桌面组件开发
- Android widget 桌面组件开发
- Android桌面组件开发例子
- Android widget 桌面组件开发
- Android widget 桌面组件开发
- [书摘]Android特色开发之Google Map和桌面组件
- Android特色开发之Google Map和桌面组件
- 2014迅雷校园招聘笔试题答案
- NoSQL代表: Mongo DB(芒果数据库)
- Linux下安装Erlang
- 二叉树的先序,中序,后序遍历的非递归算法
- [Linux/Unix C 编程] perror函数,strerror函数,errno
- Android桌面组件开发之实时文件夹(Live_Folders)
- iOS 获取本机可以存放文件的路径
- Java过滤器实现原理
- 0910
- 三、Mongo中的CRUD
- 正则表达式30分钟入门教程
- c类型自动转换
- 几种压缩算法原理介绍
- varchar字符排序,cmd中读取mysql