转自:http://yangzc106.iteye.com/blog/1120415
这几天有些忙,要做关于访问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);
- }
- }
- }