Livefolder
[功能]
之所以说"桥" 是因为:
Livefolder 功能并没有开始就具备 而是后期加上去的 这就有了一个问题:早期的ContentProvider 里面的方法 query() 并没有提供对 Livefolder 的支持 而 Livefolder 的query() 是要含有指导列明的 这二者不可协调 要么改动ContentProvider 要么不用Livefolder 为了解决这个问题 我想想出了一个办法
1. 现有一个比较早的ContentProvider :CProviderMin 其action 为:
写道
<provider android:name="CProviderMin"
android:authorities="com.andriod.providers.countrycode" />
2. 现在想开发对CProviderMin 的Livefolder 但是又不想改动CProviderMin 的代码 于是我新加了一个ContentProvider: LivefolderProvider 其action 为:
写道
<provider android:name="LivefolderProvider"
android:authorities="com.andriod.providers.LivefolderProvider.countrycode" />
关键是:实现 LivefolderProvider 的 query() 要求:
写道
1. 通过 ContentResolver 来访问目标ContentProvider:CProviderMin 并含有 Livefolder 所需的指定列明
2. 把 上面的 query() 结果返回
其query() 实现如下:
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
String[] myProjection = {
CHelper.SQLiteColumn.ID + " AS " + LiveFolders._ID,
CHelper.SQLiteColumn.COUNTRY + " AS " + LiveFolders.NAME,
CHelper.SQLiteColumn.CODE + " AS " + LiveFolders.DESCRIPTION
};
ContentResolver resolver = this.getContext().getContentResolver();
Uri u2 = Uri.parse("content://"+"com.andriod.providers.countrycode"+"/item");
Cursor c = resolver.query(u2, myProjection, null, null, null);
return c;
}
3. 准备 "android.intent.action.CREATE_LIVE_FOLDER" 的 Activity 如下:
public class CreateLivefolder extends Activity {
public static final Uri LIVE_FOLDER_URI =
Uri.parse("content://" + "com.andriod.providers.countrycode" + "/livefolder");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (getIntent().getAction()
.equals(LiveFolders.ACTION_CREATE_LIVE_FOLDER)) {
Intent intent = new Intent();
intent.setData(LIVE_FOLDER_URI);
intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_NAME,
"CountryLivefolder");
intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_ICON,
Intent.ShortcutIconResource.fromContext(this,
R.drawable.icon));
intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE,
LiveFolders.DISPLAY_MODE_LIST);
setResult(RESULT_OK, intent);
} else {
setResult(RESULT_CANCELED);
}
finish();
}
}
关键是: 把其所使用的 ContentProvider 通过 setData() 指向 LivefolderProvider 即可
4. emulator 运行截图:略 因为要睡觉了
* ContentResolver 截图:
* Livefolder 截图:
之所以写这篇blog 是因为在一个论坛提过这个弊端 所以尝试一把 因为这仅仅是把自己想法实现一些 而且也不知道有没有用 所以说得不是太详细 有需求的朋友 请回复一下 我再细说.
题外话: 因为这个想法很有"桥"的感觉 所以以这个命名!
分享到:
相关推荐
快捷方式在Windows中通常以.lnk文件扩展名存在,它实际上是一个指向实际文件或位置的指针,而不是实际内容的副本。创建快捷方式可以通过右键点击目标文件或程序,然后选择“发送到”>“桌面(创建快捷方式)”。快捷...
在深入了解LiveFolder之前,我们先来看看Launcher的启动流程,这对于理解LiveFolder如何融入整个系统至关重要。 1. **AndroidRuntime**:系统的运行环境初始化。 2. **LauncherApplication.onCreate()**:Launcher...
LiveFolder 的实现等方面。 一、主要文件和类 1. Launcher.java:Launcher 的主要 Activity,负责加载和显示 Launcher 的界面。 2. DragLayer.java:Launcher 布局的根视图,负责拖动和事件处理。 3. ...
14.5、实时文件夹(LiveFolder): 第15章、传感器应用开发 15.2、Android的常用传感器:方向传感器Orientation; 磁场传感器Magnetic Field; 温度传感器Temperature; 光传感器Light; 压力传感器Pressure; 第16章...
LiveFolder.java 是系统自带的文件夹,从系统中创建出的文件夹,例如联系人的文件夹等。 11. DeleteZone.java:删除框,实现了 DropTarget 和 DragListener 两个接口。 DeleteZone.java 是删除框,实现了 ...
2. **Namespace Extension**:实时文件夹是命名空间扩展的一种形式,它扩展了Windows资源管理器的文件系统视图,使用户能够在文件夹树中看到自定义的内容。 3. **IShellFolder Interface**:开发实时文件夹的核心是...
1. **动态内容管理(ch15_livefolder)**:Live Folders是Android的一项特性,它允许在桌面或者其他UI位置创建实时更新的文件夹,显示来自特定数据源的内容。在OPhone上,Live Folders可能涉及到更复杂的系统集成和...
10. **LiveFolder.java**: 系统自动生成的文件夹,如联系人或音乐文件夹,它们动态地显示特定类型的数据。 11. **DeleteZone**: 当拖动item靠近时,DeleteZone会显示,允许用户删除item。在非活动状态时,它是不...
10. **LiveFolder.java**:系统自动生成的文件夹,如联系人文件夹,直接从系统数据中创建。 通过对这些核心组件的分析,我们可以了解到Android Launcher如何处理用户的触摸输入,如何组织和显示桌面图标,以及如何...
10. **LiveFolder.java**: 系统自动生成的文件夹,如联系人或音乐,它们动态地从系统数据中获取内容。 11. **DeleteZone**: 用于接收被拖动到此处的item,通常在屏幕边缘显示,当用户拖动item到删除框时,item会被...
- **AddAdapter**:用于添加桌面元素的适配器,管理各类列表项如LiveFolder、Widget、Shortcut和Wallpaper。 - **AllAppsGridView**:继承自`GridView`,展示所有可启动应用的图标列表。 - **ApplicationInfo**:...
- `LiveFolder_Demo` 文件很可能包含了 `LiveFolderProvider.java`,这是核心的 ContentProvider 类,负责提供数据和响应系统请求。 - 可能还有 `LiveFolderAdapter.java`,这是一个自定义的 `CursorAdapter`,...
- 如果是长按拖拽,则不将事件传递给子视图,而是直接交给`onTouchEvent()`处理,以实现item的移动。 - 如果不是拖拽操作,则将事件传递给目标视图进行进一步处理。 - **扩展性**:通过修改`onInterceptTouchEvent...
14.5、实时文件夹(LiveFolder): 第15章、传感器应用开发 15.2、Android的常用传感器:方向传感器Orientation; 磁场传感器Magnetic Field; 温度传感器Temperature; 光传感器Light; 压力传感器Pressure; 第16章、...
14.5、实时文件夹(LiveFolder): 第15章、传感器应用开发 15.2、Android的常用传感器:方向传感器Orientation; 磁场传感器Magnetic Field; 温度传感器Temperature; 光传感器Light; 压力传感器Pressure; 第16章...
14.5 实时文件夹(LiveFolder) 539 14.5.1 使用实时文件夹显示 ContentProvider的数据 540 14.6 本章小结 545 第15章 传感器应用开发 546 15.1 利用Android的传感器 547 15.1.1 开发传感器应用 547 ...