2011.09.07(4)——— android 跨进程通信之content provider
16lz
2021-12-04
2011.09.07(4)——— android 跨进程通信之content provider
参考:http://blog.csdn.net/yan8024/article/details/6444368
1、自定义provider 包含两个查询:全名查询和模糊查询
xml注册:
权限:
2、另一个应用调用:
参考: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(); }
更多相关文章
- NPM 和webpack 的基础使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- Android(安卓)Log Analysis转
- android保持屏幕常亮
- ubuntu 平台 FFmpeg Android(安卓).so文件编译
- 布局技巧:使用ViewStub
- 一文帮你搞懂 Android(安卓)文件描述符
- Android零基础入门第8节:HelloWorld,我的第一趟旅程出发点
- Android(安卓)UI开发(一)初识安卓