Android活动文件夹

Android活动文件夹是SDK1.5引入的,支持开发人员在设备的桌面上公开ContentProvider,如联系人、媒体数据等。Android中的活动文件夹对ContentProvider的作用就相当于RSS阅读器对发布网站的作用。

活动文件夹的工作原理如下:

(1)首先在主页上创建一个图标,表示来自ContentProvider的一组行。通过为图标指定一个URI来进行链接。

(2)当用户单击该图标时,系统接受URI并用它掉用ContentProvider。ContentProvider通过游标返回一组行。

(3)只要此游标包含活动文件夹想要的列(比如名称、描述和单击时调用的程序)系统就会以ListView或GridView形式呈现这些行。

(4)因为在基础存储数据更改时,ListView或GridView能够更新自己的数据,所以这些视图被视为活的,活动文件夹因此而得名。

了解了活动文件夹概念后,接下来介绍如何构建活动文件夹。要构建活动文件夹需要两个东西:一个活动和一个专门的ContentProvider。Android使用次活动标签来填充可用活动文件夹列表。下面的例子中我们将使用Android内置的ContentProvider:Contacts联系人,来实现一个联系人的活动文件夹。

首先来看描述文件:AndroidManifest.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="com.test.livefolder"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.   
  7.   
  8.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  9.         <activity android:name=".MainActivity"  
  10.                   android:label="@string/app_name">  
  11.             <intent-filter>  
  12.                 <strong><category android:name="android.intent.category.DEFAULT" />  
  13.                 <action android:name="android.intent.action.CREATE_LIVE_FOLDER"/></strong>  
  14.             </intent-filter>  
  15.         </activity>  
  16.   
  17.     </application>  
  18. </manifest>  

接下来是主活动类:

  1. public class MainActivity extends Activity {  
  2.     /** Called when the activity is first created. */  
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.           
  7.         final Intent intent = getIntent();  
  8.         final String action = intent.getAction();  
  9.         //从联系人取得数据   
  10.         final Uri uri = Uri.parse("content://contacts/live_folders/people");  
  11.         if (LiveFolders.ACTION_CREATE_LIVE_FOLDER.equals(action)){  
  12.             setResult(RESULT_OK, createLiveFolder(uri,"Contacts LF",R.drawable.icon));  
  13.         }  
  14.         else{  
  15.             setResult(RESULT_CANCELED);  
  16.         }  
  17.         this.finish();  
  18.     }  
  19.     //创建活动文件夹   
  20.     private Intent createLiveFolder(Uri uri,String name,int icon){  
  21.         final Intent intent = new Intent();  
  22.           
  23.         //设置Intent   
  24.         intent.setData(uri);  
  25.         //活动文件夹名称   
  26.         intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_NAME, name);  
  27.         //活动文件夹图标   
  28.         intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_ICON, Intent.ShortcutIconResource.fromContext(this, icon));  
  29.         //显示模式:列表   
  30.         intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE, LiveFolders.DISPLAY_MODE_LIST);  
  31.           
  32.         return intent;  
  33.     }  
  34. }  

运行程序,长按桌面,选择文件夹,结果如图所示:

Android活动文件夹

然后选择,Contact live folder在桌面出现一个活动文件夹,如图:

Android活动文件夹

单击此活动文件夹,由于此时没有联系人记录所以活动文件夹中列表为空如图,

Android活动文件夹

我们手动添加2个联系人记录后,在点击Contact LF活动文件夹,结果如图:

Android活动文件夹

可见活动文件夹中的数据确实会实时更新。