2011.09.07(4)——— android 跨进程通信之content provider

参考:http://blog.csdn.net/yan8024/article/details/6444368

1、自定义provider 包含两个查询:全名查询和模糊查询

package com.HelloWorld;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import android.content.ContentProvider;import android.content.ContentValues;import android.content.Context;import android.content.UriMatcher;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.net.Uri;import android.os.Environment;public class MyProvider extends ContentProvider {private final static String DB_DIR = "lp";private final static String DB_NAME = "contacts.db";private final static String TABLE_NAME = "PRMContacts";private Context mContext;private SQLiteDatabase db ;private  static  final  String AUTHORITY = "com.helloword.myprovider" ;private  static  UriMatcher uriMatcher;  private  static  final  int  ONE = 1 ;  private  static  final  int  MORE = 2 ;  static       {          //  添加访问ContentProvider的Uri           uriMatcher = new  UriMatcher(UriMatcher.NO_MATCH);          uriMatcher.addURI(AUTHORITY, "one" , ONE);          uriMatcher.addURI(AUTHORITY, "more/*" , MORE);      }  @Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {// TODO Auto-generated method stubreturn 0;}@Overridepublic String getType(Uri uri) {// TODO Auto-generated method stubreturn null;}@Overridepublic Uri insert(Uri uri, ContentValues values) {// TODO Auto-generated method stubreturn null;}@Overridepublic boolean onCreate() {mContext = getContext();db = openDatabase();return true;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {Cursor cursor = null;System.out.println("query");switch(uriMatcher.match(uri)){case ONE:cursor = db.query(TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder);break;case MORE:String word = uri.getPathSegments().get(1);cursor = db.rawQuery("select * from "+TABLE_NAME+" where displayname like ?", new String[]{word+"%"});break;default:throw new IllegalArgumentException("无效参数");}return cursor;}@Overridepublic int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {// TODO Auto-generated method stubreturn 0;} private SQLiteDatabase openDatabase()    {        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){        FileOutputStream fos = null;        InputStream is = null;        try            {        String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/"+DB_DIR;                // 获得dictionary.db文件的绝对路径            String databaseFilename = path + "/" + DB_NAME;            File dir = new File(path);                        if(!dir.exists()){            dir.mkdir();            }                        File db = new File(databaseFilename);            if(!db.exists()){            fos = new FileOutputStream(db);            is = mContext.getResources().openRawResource(R.raw.contacts);                        byte[] buffer = new byte[1024];            int length = 0;            while((length = is.read(buffer))!=-1){            fos.write(buffer, 0, length);            }            }                        SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);            return database;        }        catch (Exception e){                }finally{        if(fos!=null){        try {fos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}        }        if(is!=null){        try {is.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}        }        }        }                    return null;    }}


xml注册:

<receiver android:name=".MyBroadcast" ><intent-filter><action android:name="com.lp.MyBroadcast"/></intent-filter></receiver><provider android:name=".MyProvider" android:authorities="com.helloword.myprovider" />


权限:

<!-- 在SDCard中创建与删除文件权限 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><!-- 往SDCard写入数据权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>



2、另一个应用调用:

private Button find;private TextView name;private static final String ONE = "content://com.helloword.myprovider/one" ;private static final String MORE = "content://com.helloword.myprovider/more" ;find.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String str = name.getText().toString();if(str!=null){//findTelByName(str);findTelsByName(str);}}});        private void findTelByName(String name){    Uri uri = Uri.parse(ONE);    Cursor cursor = getContentResolver().query(uri, null, "displayname=?", new String[]{name}, null);    String result = "没有找到电话";    if(cursor!=null){    cursor.moveToNext();    result = cursor.getString(cursor.getColumnIndex("telnum"));    }    Toast.makeText(this, result, 1).show();    }    private void findTelsByName(String name){    Uri uri = Uri.parse(MORE+"/"+name);    Cursor cursor = getContentResolver().query(uri, null, null, null, null);    String result = "";    if(cursor!=null){    while(cursor.moveToNext()){    result += cursor.getString(cursor.getColumnIndex("telnum"));    result += ",";    }        }    if(!result.equals(""))    Toast.makeText(this, result, 1).show();    }


更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. Android(安卓)Log Analysis转
  4. android保持屏幕常亮
  5. ubuntu 平台 FFmpeg Android(安卓).so文件编译
  6. 布局技巧:使用ViewStub
  7. 一文帮你搞懂 Android(安卓)文件描述符
  8. Android零基础入门第8节:HelloWorld,我的第一趟旅程出发点
  9. Android(安卓)UI开发(一)初识安卓

随机推荐

  1. Android内部存储改变读取权限
  2. Android使用XML全攻略
  3. android上使用XML
  4. android强大的SpannableStringBuilder
  5. Android解析XML(PULL)展示到ListView
  6. android与C++的选择
  7. 安装Android的SDK--中文教程(完整版,包括Ec
  8. Android指纹解锁调用
  9. android 中Message、Handler、Message Qu
  10. Android用户版本分布更新 2.1版领先