Android桌面组件开发之实时文件夹(Live_Folders)

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

本人对于实现最基本的通讯录打电话简单操作俩种方法,并且我都进行了尝试,不过对于其中一种方法实现实在过于复杂,因为牵扯到众多不同种Cursor的应用,在这里本人得到了一个较为简单的方法实现想要的效果,还是先将图片能上来看其效果吧

点击之后

这是我通讯录里出现的人的设置,随机点击一个

得到我们最终想要的结果!

下面我们来看一下具体的操作设置:

首先是编辑AndroidManifest.xml文件

xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.zzy.folder"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk android:minSdkVersion="10" />

<application

android:icon="@drawable/ic_launcher"

android:label="@string/app_name" >

<activity

android:name=".LivefoldersActivity"

android:label="@string/app_name" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

<action android:name="android.intent.action.CREATE_LIVE_FOLDER" />

<category android:name="android.intent.category.DEFAULT" />

intent-filter>

activity>

application>

manifest>

下面是XML文件的设计:

xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello" />

LinearLayout>

要说明的是android.intent.extra.livefolder.BASE_INTENT这一附加信息,它的值是一个Intent对象。在用户单击展开实时文件夹后的选项时,首先该Intent对象的Data中的URI会附加上所点选项的ID,然后传入Launcher调用的startActivity方法中以启动所期望的Activity。这里我们把BASE_INTENT设置成了Actionandroid.intent.action.View、URI为content://contacts/people/的Intent对象。具体操作下面显示:

下面需要onCreate方法中将实现文件夹的相关信息装入Intent,并通过setResult方法设置为Intent,最后调用finish方法结束,并把结果返回给Home应用程序,以添加实施文件夹:

public class LivefoldersActivity 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");

//这是最重要的设置 设置其动作ACtion

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.attached_image_placeholder));

//设置其显示效果为列表显示

intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE,

LiveFolders.DISPLAY_MODE_LIST);

setResult(RESULT_OK, intent);

/*} else {*/

//setResult(RESULT_CANCELED);

//}

finish();

}

}

最后还是要说一下有些资料参考书上写的数据源为“Content://contacts/live_folders/people”

即为联系人的信息 这确实没错,但我尝试他们点击之后的事件设置即为Intent.ACTION_CALL,发现其貌似存在很大的错误这无法直接设置进行拨打电话!所以这点需要注意!

你可能感兴趣的:(Android桌面组件开发之实时文件夹(Live_Folders))