这几天有些忙,要做关于访问exchange服务器的技术调研,环境总出问题。微软的东西还真复杂!看了看android2.2的源码,本来想写点东西,但想想也没什么好写的。主要是关于软键盘事件的传递,网上有很多这方面的文章。今天看了看contentprovider,就写点这方面的东西吧。
android为我们提供了ContentProvider来实现数据的共享,一个程序如果想让别的程序可以操作自己的数据,就定义自己的ContentProvider。今天就简单介绍一它的实现方法。换肤可能会用到。
第一步:继承ContentProvider,代码如下:
package com.test.android.skin.main; import java.util.List; import android.content.ContentProvider; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.net.Uri; import android.util.Log; public class Provider extends ContentProvider{ private SQLiteOpenHelper helper; @Override public boolean onCreate() { helper = new SqLHelper(this.getContext()); return false; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { List<String> paths = uri.getPathSegments(); String tableName = paths.get(0); SQLiteDatabase db = helper.getReadableDatabase(); return db.query(tableName, null, null, null, null, null, null); } @Override public String getType(Uri uri) { return null; } @Override public Uri insert(Uri uri, ContentValues values) { List<String> paths = uri.getPathSegments(); String tableName = paths.get(0); Log.d("Tag",tableName + ":::"+uri.toString()); SQLiteDatabase db = helper.getWritableDatabase(); db.insert(tableName, null, values); return uri; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { return 0; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { return 0; } }
第二部:在AndroidManifest.xml添加provider
<provider android:authorities="com.test.android.skin.main.provider" android:name="Provider"></provider>
以上就做完一个provider了。
使用方式:
package com.test.android.skin.myskin; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.util.Log; public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ContentResolver resolver = this.getContentResolver(); Uri url = Uri.parse("content://com.test.android.skin.main.provider/skinTab"); ContentValues values = new ContentValues(); values.put("id", "40"); values.put("packname", "org.yangzc.package40"); resolver.insert(url, values); Uri queryurl = Uri.parse("content://com.test.android.skin.main.provider/skinTab"); Cursor c = resolver.query(queryurl, null, null, null, null); while(c.moveToNext()){ String id = c.getString(c.getColumnIndex("id")); String packname = c.getString(c.getColumnIndex("packname")); Log.d("Tag", "Id:"+id + " packname:" + packname); } } }