Android之實時文件夾

實時文件夾是一種用來顯示由某個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已經實現瞭對實時文件夾的相關支持,所以下面我們就以創建所有聯系人的實時文件夾的程序來作為本節的示例。
TestActivity類
 
package com.ljq.activity;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.LiveFolders;

public class TestActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(getIntent().getAction().equals(LiveFolders.ACTION_CREATE_LIVE_FOLDER)){
            Intent intent = new Intent();
            intent.setData(Uri.parse("content://contacts/live_folders/people"));
            intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_BASE_INTENT,
                    new Intent(Intent.ACTION_VIEW,ContactsContract.Contacts.CONTENT_URI));
            intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_NAME, "電話本"); //快捷方式的標題
            intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_ICON,
                    Intent.ShortcutIconResource.fromContext(this, R.drawable.png1));//快捷方式的圖標
            intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE, LiveFolders.DISPLAY_MODE_LIST);//顯示模型
            setResult(RESULT_OK, intent);
        }
        else{
            setResult(RESULT_CANCELED);
        }
        finish();
    }
}
 
清單文件
 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ljq.activity" android:versionCode="1"
    android:versionName="1.0">
    <application android:icon="@drawable/icon"
        android:label="@string/app_name">
        <activity android:name=".TestActivity"
            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="7" />

</manifest>
 

  運行結果
1、2、  3、
 

摘自 Ruthless-JAVA
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *