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();
}
分享到:
相关推荐
07 D07 网络基础——七层网路.mp4 08 D08 网络基础——IP协议.mp4 09 D09 网路基础——IP和以太网之间的ARP映射.mp4 10 D10 网络基础——查看ARP和ping包.mp4 11 D11 网络基础——一步一步路由.mp4 12 D12 网络基础...
AIDL(Android Interface Definition Language)是Android提供的一种工具,用于方便开发者实现跨进程通信。AIDL使得服务端(服务提供者)可以定义一套接口,客户端(服务使用者)通过这个接口调用服务端的方法,从而...
城市规划毕业设计——国际酒店景观设计(毕业论文+答辩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项目...
文件说明: 1,安装说明.txt ——————————安装手册 2,jdk-170.tar.gz ————...4,check_java.sh———————————版本核对 注意:使用命令接口切换时,需要将自己配置的环境变量注释或者删掉!!!
嵌入式成品项目——无线接收时钟.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 ...
微信小程序——人脸检测(截图+源码).zip 微信小程序——人脸检测(截图+源码).zip 微信小程序——人脸检测(截图+源码).zip 微信小程序——人脸检测(截图+源码).zip 微信小程序——人脸检测(截图+源码).zip ...
启动通话、数据或传真呼叫,是基本的通信功能之一。 **2. ATH** —— 挂机命令。结束正在进行的通话,是呼叫控制的核心指令。 **3. ATA** —— 接听电话。自动接听来电,适用于免提通话场景。 **4. AT+CEER** ...
而Android Interface Definition Language (AIDL) 是Android提供的一种工具,用于支持跨进程通信。本文将深入探讨AIDL在Android中的应用,以及如何在客户端和服务端之间实现通信。 首先,我们来看一下AIDL的基本...
Android中文翻译组——Android中文API合集(4).chm
C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统....
微信小程序——妈妈课堂(截图+源码).zip 微信小程序——妈妈课堂(截图+源码).zip 微信小程序——妈妈课堂(截图+源码).zip 微信小程序——妈妈课堂(截图+源码).zip 微信小程序——妈妈课堂(截图+源码).zip ...
微信小程序——移动端商城(截图+源码).zip 微信小程序——移动端商城(截图+源码).zip 微信小程序——移动端商城(截图+源码).zip 微信小程序——移动端商城(截图+源码).zip 微信小程序——移动端商城(截图+...
城市规划毕业设计——尚上人家景观设计(毕业论文+答辩PPT+CAD图+设计图+效果图).zip 城市规划毕业设计——尚上人家景观设计(毕业论文+答辩PPT+CAD图+设计图+效果图).zip 城市规划毕业设计——尚上人家景观设计...
微信小程序——手势解锁(截图+源码).zip 微信小程序——手势解锁(截图+源码).zip 微信小程序——手势解锁(截图+源码).zip 微信小程序——手势解锁(截图+源码).zip 微信小程序——手势解锁(截图+源码).zip ...
在Android应用开发中,跨进程通信(IPC, Inter-Process Communication)是一个常见的需求,尤其是在大型应用或者服务组件之间。AIDL(Android Interface Definition Language)是Android系统提供的一种强大的工具,...
微信小程序——全屏动画滚动(截图+源码).zip 微信小程序——全屏动画滚动(截图+源码).zip 微信小程序——全屏动画滚动(截图+源码).zip 微信小程序——全屏动画滚动(截图+源码).zip 微信小程序——全屏动画...
ESG信息披露机制下的绿色...展研究——基于企业披露视角_周艳.caj
4. 长——短 5. 甜——苦 6. 慢——快 7. 黑——白 8. 近——远 9. 前——后 10. 冷淡——热情 11. 黑暗——光明 12. 南——北 13. 低——高 14. 闲——忙 15. 开——关 16. 哭——笑 17. 臭——香 18. 丑——美 19....