这几天有些忙,要做关于访问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);
}
}
}