Livefolder
[功能]
之所以说"桥" 是因为:
Livefolder 功能并没有开始就具备 而是后期加上去的 这就有了一个问题:早期的ContentProvider 里面的方法 query() 并没有提供对 Livefolder 的支持 而 Livefolder 的query() 是要含有指导列明的 这二者不可协调 要么改动ContentProvider 要么不用Livefolder 为了解决这个问题 我想想出了一个办法
1. 现有一个比较早的ContentProvider :CProviderMin 其action 为:
android:authorities="com.andriod.providers.countrycode" />
2. 现在想开发对CProviderMin 的Livefolder 但是又不想改动CProviderMin 的代码 于是我新加了一个ContentProvider: LivefolderProvider 其action 为:
android:authorities="com.andriod.providers.LivefolderProvider.countrycode" />
关键是:实现 LivefolderProvider 的 query() 要求:
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 是因为在一个论坛提过这个弊端 所以尝试一把 因为这仅仅是把自己想法实现一些 而且也不知道有没有用 所以说得不是太详细 有需求的朋友 请回复一下 我再细说.
题外话: 因为这个想法很有"桥"的感觉 所以以这个命名!