這幾天有些忙,要做關於訪問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);
}
}
}