`

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();
    }


分享到:
评论

相关推荐

    从一条电线到建立一个网络视频.zip

    07 D07 网络基础——七层网路.mp4 08 D08 网络基础——IP协议.mp4 09 D09 网路基础——IP和以太网之间的ARP映射.mp4 10 D10 网络基础——查看ARP和ping包.mp4 11 D11 网络基础——一步一步路由.mp4 12 D12 网络基础...

    Android使用AIDL实现跨进程通信

    AIDL(Android Interface Definition Language)是Android提供的一种工具,用于方便开发者实现跨进程通信。AIDL使得服务端(服务提供者)可以定义一套接口,客户端(服务使用者)通过这个接口调用服务端的方法,从而...

    城市规划毕业设计——国际酒店景观设计(毕业论文+答辩PPT).zip

    城市规划毕业设计——国际酒店景观设计(毕业论文+答辩PPT).zip 城市规划毕业设计——国际酒店景观设计(毕业论文+答辩PPT).zip 城市规划毕业设计——国际酒店景观设计(毕业论文+答辩PPT).zip 城市规划毕业设计...

    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嵌入式成品项目——无线接收时钟...

    python项目——DIY字符画.zip

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

    微信小程序——人脸检测(截图+源码).zip

    微信小程序——人脸检测(截图+源码).zip 微信小程序——人脸检测(截图+源码).zip 微信小程序——人脸检测(截图+源码).zip 微信小程序——人脸检测(截图+源码).zip 微信小程序——人脸检测(截图+源码).zip ...

    wavecom 模块常用AT指令手册.pdf

    启动通话、数据或传真呼叫,是基本的通信功能之一。 **2. ATH** —— 挂机命令。结束正在进行的通话,是呼叫控制的核心指令。 **3. ATA** —— 接听电话。自动接听来电,适用于免提通话场景。 **4. AT+CEER** ...

    android 跨进程通信aidl

    而Android Interface Definition Language (AIDL) 是Android提供的一种工具,用于支持跨进程通信。本文将深入探讨AIDL在Android中的应用,以及如何在客户端和服务端之间实现通信。 首先,我们来看一下AIDL的基本...

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

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

    C语言项目——企业员工管理系统.zip

    C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统....

    微信小程序——妈妈课堂(截图+源码).zip

    微信小程序——妈妈课堂(截图+源码).zip 微信小程序——妈妈课堂(截图+源码).zip 微信小程序——妈妈课堂(截图+源码).zip 微信小程序——妈妈课堂(截图+源码).zip 微信小程序——妈妈课堂(截图+源码).zip ...

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

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

    城市规划毕业设计——尚上人家景观设计(毕业论文+答辩PPT+CAD图+设计图+效果图).zip

    城市规划毕业设计——尚上人家景观设计(毕业论文+答辩PPT+CAD图+设计图+效果图).zip 城市规划毕业设计——尚上人家景观设计(毕业论文+答辩PPT+CAD图+设计图+效果图).zip 城市规划毕业设计——尚上人家景观设计...

    微信小程序——手势解锁(截图+源码).zip

    微信小程序——手势解锁(截图+源码).zip 微信小程序——手势解锁(截图+源码).zip 微信小程序——手势解锁(截图+源码).zip 微信小程序——手势解锁(截图+源码).zip 微信小程序——手势解锁(截图+源码).zip ...

    Androidaidl跨进程调用.rar

    在Android应用开发中,跨进程通信(IPC, Inter-Process Communication)是一个常见的需求,尤其是在大型应用或者服务组件之间。AIDL(Android Interface Definition Language)是Android系统提供的一种强大的工具,...

    微信小程序——全屏动画滚动(截图+源码).zip

    微信小程序——全屏动画滚动(截图+源码).zip 微信小程序——全屏动画滚动(截图+源码).zip 微信小程序——全屏动画滚动(截图+源码).zip 微信小程序——全屏动画滚动(截图+源码).zip 微信小程序——全屏动画...

    ESG信息披露机制下的绿色...展研究——基于企业披露视角_周艳.caj

    ESG信息披露机制下的绿色...展研究——基于企业披露视角_周艳.caj

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

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

Global site tag (gtag.js) - Google Analytics