Android-管理Android手机桌面
没有接触手机编程之前,我就很好奇,那些主题背景和动态壁纸是如何做出来的,如何把图标放到手机桌面上,学习了关于管理Android手机桌面之后,我大致了解了这些内容,算是扫了一下盲了。
我相信只要用过一段Android系统手机的用户,对于手机桌面的操作是非常明了的。比如删除桌面组件,添加相应的组件到桌面这些简单的操作。
关于手机桌面的这部分内容,我自己学习了如何开发实时壁纸(Live Wallpapers),如何在桌面上创建快捷方式,管理桌面小控件,如何开发实时文件夹(LiveFolder)等。
下面是一个显示生词本的实时文件夹的实例
这个实时文件夹显示ContentProvider的数据,这要把之前开发DictProvider部署到模拟器中,才可以用实时文件显示ContentProvider返回的数据
创建项目:WordsLiveFolder
运行项目效果:
package org.wwj.desktop;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.LiveFolders;
public class WordsLiveFolder extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//如果该Intent的Action是创建实时文件夹的Action
if(getIntent().getAction().equals(LiveFolders.ACTION_CREATE_LIVE_FOLDER)){
Intent intent = new Intent();
//设置实时文件夹所显示ContentProvider提供的数据的uri
intent.setData(Uri.parse("content://org.crazyit.providers.dictprovider/words"));
//设置实时文件夹的base intent属性
intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_BASE_INTENT, new Intent(Intent.ACTION_VIEW
, Uri.parse("content://org.crazyit.providers.dictprovider/word/")));
//设置实时文件夹的名称
intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_NAME, "生词本");
//设置实时文件夹的图标
intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_ICON, Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_launcher));
//设置实时文件夹的显示模式
intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE, LiveFolders.DISPLAY_MODE_GRID);
setResult(RESULT_OK, intent);
}
else{
setResult(RESULT_CANCELED);
}
//结束该Activity
finish();
}
}
<activity android:name=".WordsLiveFolder"
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>
package org.wwj.desktop;
import android.app.Activity;
import android.content.ContentUris;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.widget.EditText;
public class ShowWordActivity extends Activity
{
EditText etWord , etDescription;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.show);
// 获取界面组件
etWord = (EditText) findViewById(R.id.word);
etDescription = (EditText) findViewById(R.id.description);
Uri uri = getIntent().getData();
// 获取单词ID
long id = ContentUris.parseId(uri);
// 从ContentProvider查询指定单词
Cursor cursor = getContentResolver().query(
Uri.parse("content://org.crazyit.providers.dictprovider/words")
, null , "_id=?" , new String[]{id + ""} , null );
if(cursor.moveToNext())
{
// 使用界面组件显示查询得到的结果
etWord.setText(cursor.getString(1));
etDescription.setText(cursor.getString(2));
}
}
}
<activity
android:name=".ShowWordActivity"
android:label="@string/title_activity_show_word" >
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="vnd.android.cursor.item/org.crazyit.dict"/>
</intent-filter>
</activity>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/word"
/>
<EditText
android:id="@+id/word"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cursorVisible="false"
android:editable="false"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/description"
/>
<EditText
android:id="@+id/description"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:lines="3"
android:cursorVisible="false"
android:editable="false"
/>
</LinearLayout>