Livefolder 以桥的形式存在

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 以桥的形式存在

 

* Livefolder 截图:

Livefolder 以桥的形式存在

 

 

之所以写这篇blog 是因为在一个论坛提过这个弊端 所以尝试一把 因为这仅仅是把自己想法实现一些 而且也不知道有没有用 所以说得不是太详细 有需求的朋友 请回复一下 我再细说.

 

 

题外话: 因为这个想法很有"桥"的感觉 所以以这个命名!

你可能感兴趣的:(C++,c,android,Blog,C#)