`

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

    计算机视觉大作业——三维重建.zip计算机视觉大作业——三维重建.zip计算机视觉大作业——三维重建.zip计算机视觉大作业——三维重建.zip计算机视觉大作业——三维重建.zip计算机视觉大作业——三维重建.zip计算机...

    2011.10.09——— android ImageView放大缩小(2)

    标题中的“2011.10.09——— android ImageView放大缩小(2)”指的是一个关于Android平台中ImageView组件的优化技术,特别是如何处理图片的缩放问题。在Android应用开发中,ImageView是用于显示图像的常见组件,但...

    基于WXSS_WXML技术...序的开发——以西岭雪山为例_邹明荣.caj

    基于WXSS_WXML技术...序的开发——以西岭雪山为例_邹明荣.caj

    NPSWF32调试版本.rar

    ▕ ▕ ▕—————————————————————————————————————— ▕ ▕——[13.27MB] 【NPSWF32调试版本_11.1.102.55_debug】 ▕ ▕ ▕——[856 B] flashplayer.xpt ▕ ▕ ▕——[3.90MB...

    2918.D密钥分散管理系统——密钥确认算法实现 开题报告.doc

    2918.D密钥分散管理系统——密钥确认算法实现 开题报告.doc

    2011.10.19——— android 显示一行内容并录制其音频

    这篇博客“2011.10.19——— android 显示一行内容并录制其音频”可能详细探讨了如何实现这个功能。虽然描述部分没有提供具体信息,但我们可以基于标签“源码”和“工具”来推测文章内容,以及从文件名...

    加密解密字符串找不到 com.sun.crypto.provider.SunJCE

    Java加密解密字符串找不到 com.sun.crypto.provider.SunJCE() 用到jar包

    安卓app开发项目-实用源码——Android屏幕锁源码(源码).zip

    安卓app开发项目-实用源码——Android屏幕锁源码(源码).zip安卓app开发项目-实用源码——Android屏幕锁源码(源码).zip安卓app开发项目-实用源码——Android屏幕锁源码(源码).zip安卓app开发项目-实用源码——Android...

    Android中文翻译组——Android开发者指南(2).chm

    Android中文翻译组是一个非盈利性质的开源组织,至今已超过300人报名参与,关于翻译组的介绍,请看这里。欢迎更多朋友加入,发邮件到over140@gmail.com申请加入。 Android中文翻译组WIKI网站:...

    javax.inject.Provider

    Spring 依赖的 javax.inject.Provider

    C语言项目——通讯录管理系统.zip

    C语言项目——通讯录管理系统.zip C语言项目——通讯录管理系统.zip C语言项目——通讯录管理系统.zip C语言项目——通讯录管理系统.zip C语言项目——通讯录管理系统.zip C语言项目——通讯录管理系统.zip C语言...

    跨进程通信.pptx

    随着移动设备的普及和发展,Android系统作为主流操作系统之一,其跨进程通信机制尤为重要。 #### 二、多进程带来的问题及解决方案 在深入探讨Android跨进程通信之前,我们先来了解一下多进程可能带来的问题以及...

    C语言项目——窗体版图书管理系统.zip

    C语言项目——窗体版图书管理系统.zip C语言项目——窗体版图书管理系统.zip C语言项目——窗体版图书管理系统.zip C语言项目——窗体版图书管理系统.zip C语言项目——窗体版图书管理系统.zip C语言项目——窗体版...

    综合实践活动二年级(下册)教(学)案.doc

    5. 维护公共卫生 ———————————————————— 第九周 6. 流鼻血时怎么办 ———————————————--- 第十一周 7. 食用冷饮要适当 ———————————————--- 第十三周 8. 夏天要睡...

    天正建筑CAD快捷键-较全常用.doc

    4. F7:栅格——显示或隐藏栅格,用于辅助定位。 5. F8:正交——开启或关闭正交模式,使直线绘制保持水平或垂直。 6. F9:栅格捕捉——控制是否锁定到栅格点进行绘制。 7. F10:极轴——开启或关闭极轴追踪,提供...

    2021-2022年收藏的精品资料企业会计准则制度大全.doc

    错误更正...............................................................——建造合同...........................................................................................112企业会计准则——股份支付.....

    Androidaidl跨进程调用.zip

    在Android系统中,跨进程通信(IPC,Inter-Process Communication)是实现不同应用程序间数据交换的关键技术。Androidaidl(Android Interface Definition Language)是Android提供的一种接口定义语言,专门用于处理...

    教务管理系统-数据库课程设计mysql+java.zip

    教务管理系统——数据库课程设计mysql+java.zip教务管理系统——数据库课程设计mysql+java.zip教务管理系统——数据库课程设计mysql+java.zip教务管理系统——数据库课程设计mysql+java.zip教务管理系统——数据库...

    中考英语外研版初二下模块4练习学案02:短语总结+练习及解析.docx

    1. **a copy of** —— 表示“一份...的复印件”。 2. **turn on** —— 打开(设备),**turn off** —— 关闭(设备)。 3. **save one's life** —— 挽救某人的生命。 4. **use sth. to do sth.** —— 使用某物...

    qt窗口部件——其他窗口部件代码

    ———————————————— 版权声明:本文为CSDN博主「MechMaster」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:...

Global site tag (gtag.js) - Google Analytics