`

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

阅读更多
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);  
    }  
	
	@Override
	public int delete(Uri uri, String selection, String[] selectionArgs) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public String getType(Uri uri) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Uri insert(Uri uri, ContentValues values) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean onCreate() {
		mContext = getContext();
		db = openDatabase();
		return true;
	}

	@Override
	public 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;
	}

	@Override
	public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
		// TODO Auto-generated method stub
		return 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 block
							e.printStackTrace();
						}
		        	}
		        	if(is!=null){
		        		try {
							is.close();
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.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() {
			
			@Override
			public 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();
    }


分享到:
评论

相关推荐

    Android经典项目——AndroidStudio版本.zip

    Android经典项目——AndroidStudio版本.zip。 经典项目——AndroidStudio版本.zip经典项目——AndroidStudio版本.zip Android 经典项目 源码

    python项目——微信机器人.zip

    python项目——微信机器人.zip python项目——微信机器人.zip python项目——微信机器人.zip python项目——微信机器人.zip python项目——微信机器人.zip python项目——微信机器人.zip python项目——微信机器人....

    python项目——Word助手.zip

    python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目...

    JDK_1.7,amd64_ubuntu,安装包,直接下载安装即可完成1.7版本的SDK包。原生安装,不用配置环境变量,

    文件说明: 1,安装说明.txt ——————————安装手册 2,jdk-170.tar.gz ————...4,check_java.sh———————————版本核对 注意:使用命令接口切换时,需要将自己配置的环境变量注释或者删掉!!!

    嵌入式成品项目-无线接收时钟.zip

    嵌入式成品项目——无线接收时钟.zip嵌入式成品项目——无线接收时钟.zip嵌入式成品项目——无线接收时钟.zip嵌入式成品项目——无线接收时钟.zip嵌入式成品项目——无线接收时钟.zip嵌入式成品项目——无线接收时钟...

    C语言项目——MP3音乐播放器.zip

    C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——...

    python项目——DIY字符画.zip

    python项目——DIY字符画.zip python项目——DIY字符画.zip python项目——DIY字符画.zip python项目——DIY字符画.zip python项目——DIY字符画.zip python项目——DIY字符画.zip python项目——DIY字符画.zip ...

    python项目——RCQ读者书库.zip

    python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ...

    Android中文翻译组——Android中文API合集(4).chm

    Android中文翻译组——Android中文API合集(4).chm

    JAVA数据加密jar包之sunjce_provider.rar

    `sunjce_provider.jar`是Java平台的标准加密提供者之一,由Sun Microsystems开发,包含了许多加密算法实现,如RSA、AES、DES等。这个压缩包`JAVA数据加密之sunjce_provider.rar`显然提供了关于如何在Java环境中使用`...

    微信小程序——移动端商城(截图+源码).zip

    微信小程序——移动端商城(截图+源码).zip 微信小程序——移动端商城(截图+源码).zip 微信小程序——移动端商城(截图+源码).zip 微信小程序——移动端商城(截图+源码).zip 微信小程序——移动端商城(截图+...

    微信小程序——用户反馈组件(截图+源码).zip

    微信小程序——用户反馈组件(截图+源码).zip 微信小程序——用户反馈组件(截图+源码).zip 微信小程序——用户反馈组件(截图+源码).zip 微信小程序——用户反馈组件(截图+源码).zip 微信小程序——用户反馈...

    Android support.v7包

    Android support.v7包

    微信小程序——首字母排序选择(截图+源码).zip

    微信小程序——首字母排序选择(截图+源码).zip 微信小程序——首字母排序选择(截图+源码).zip 微信小程序——首字母排序选择(截图+源码).zip 微信小程序——首字母排序选择(截图+源码).zip 微信小程序——首...

    小学语文一年级下册反义及量词练习大全.pdf

    4. 长——短 5. 甜——苦 6. 慢——快 7. 黑——白 8. 近——远 9. 前——后 10. 冷淡——热情 11. 黑暗——光明 12. 南——北 13. 低——高 14. 闲——忙 15. 开——关 16. 哭——笑 17. 臭——香 18. 丑——美 19....

    Marvell_88NV1120_MPTool_2019.07.25_Toshiba (1).rar

    而`Marvell_88NV1120_MPTool_2019.07.25_Toshiba`则是工具的执行程序,用户需要按照readme中的步骤进行操作。 在实际应用中,Marvell 88NV1120 MPTool不仅适用于数据中心和企业环境,也适合对存储性能有高要求的...

    微信小程序——小游戏-别踩白块(截图+源码).zip

    微信小程序——小游戏-别踩白块(截图+源码).zip 微信小程序——小游戏-别踩白块(截图+源码).zip 微信小程序——小游戏-别踩白块(截图+源码).zip 微信小程序——小游戏-别踩白块(截图+源码).zip 微信小程序...

    java毕业设计——基于ssm的仿微博系统设计与实现(源码+数据库).zip

    java毕业设计——基于ssm的仿微博系统设计与实现(源码+数据库).zip java毕业设计——基于ssm的仿微博系统设计与实现(源码+数据库).zip java毕业设计——基于ssm的仿微博系统设计与实现(源码+数据库).zip java毕业...

    方的歇后语.pdf

    4. "万字比方字——只差一点;差一点":万字和方字在汉字结构上相近,只有一笔之差,比喻事物往往接近成功但又功亏一篑。 5. "包公的上方宝剑——先斩后奏":包公是历史上著名的清官,他有先斩后奏的权利,这句歇后...

    微信小程序——学校管理小程序以重邮为例(截图+源码).zip

    微信小程序——学校管理小程序以重邮为例(截图+源码).zip 微信小程序——学校管理小程序以重邮为例(截图+源码).zip 微信小程序——学校管理小程序以重邮为例(截图+源码).zip 微信小程序——学校管理小程序以...

Global site tag (gtag.js) - Google Analytics