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