在上一篇文章中提到了如何操作andoird数据库,如果你只想在自己的这个应用程序里使用数据库,这样已经很好了,但是,android有一个独特之处就是,数据库只能被它的创建者所使用,其他的应用是不能访问到的,所以如果你想实现不同应用之间的数据共享,就不得不用content provider了。
在Android中,content provider是一个特殊的存储数据的类型,它提供了一套标准的接口用来获取以及操作数据。并且,android自身也提供了几个现成的content provider:Contacts, Browser, CallLog, Settings, MediaStore.
应用可以通过一个唯一的ContentResolver interface来使用具体的某个content provider。
ContentResolver cr = getContentResolver();
然后你就可以用ContentResolver提供的方法来使用你需要的content provider了。其中contentResolver提供的方法包括query(),insert(),update()等。要使用这些方法,还会涉及到一个东西,那就是Uri。你可以将它理解成一个string形式的contentProvider的完全路径,它的形式为<standard_prefix>://<authority>/<data_path>/<id>,
例如:
content://browser/bookmarks
content://contacts/people
content://contacts/people/3
下面结合一个实例来看我们如何使用一个已有的content provider,给例子展示了如何从已有的电话本中读出联系人信息:
package com.android.cp;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.util.Log;
import android.widget.Toast;
public class ContentProviderTest extends Activity {
private final String TAG = "ContentProviderTest";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG,"enter onCreate");
setContentView(R.layout.main);
createCP();
}
public void createCP()
{
ContentResolver cr = getContentResolver();
//Cursor cur = managedQuery(People.CONTENT_URI, null, null, null, null);
Cursor cur = cr.query(People.CONTENT_URI, null, null, null, null);
getColumnData(cur);
}
private void getColumnData(Cursor cur){
if (cur.moveToFirst()) {
String name;
String phoneNumber;
int nameColumn = cur.getColumnIndex(People.NAME);
int phoneColumn = cur.getColumnIndex(People.NUMBER);
do {
// Get the field values
name = cur.getString(nameColumn);
phoneNumber = cur.getString(phoneColumn);
Log.i(TAG, "name="+name);
DisplayToast(name+" "+phoneNumber);
} while (cur.moveToNext());
}
}
public void DisplayToast(String s)
{
Toast.makeText(this,
s,
Toast.LENGTH_LONG).show();
}
}
需要注意的是,你需要在你的Manifest文件中加上
<uses-permission
android:name="android.permission.READ_CONTACTS">
</uses-permission>
否则,程序无法成功运行。
分享到:
相关推荐
**Android基础 Content Provider** 在Android开发中,Content Provider是一个至关重要的组件,它充当了应用程序间数据共享的桥梁。本文将深入探讨Content Provider的基本概念、创建方法、如何进行CRUD(Create、...
这篇博文的示例程序"android content provider示例程序(简单记账)"旨在帮助开发者理解如何实现一个基础的Content Provider,并将其应用到一个简单的记账软件中。 首先,我们需要了解Content Provider的基本结构。...
本"Android Content Provider Demo"着重于演示如何创建和使用Content Provider来实现跨应用的数据共享。 Content Provider是Android系统提供的一种机制,允许应用程序暴露自己的数据给其他应用,或者获取其他应用...
这篇博客《Android中Content Provider》将深入探讨这个关键组件的工作原理和使用方法。 Content Provider的基本结构包括两个主要部分:`ContentResolver`和`Provider`。`ContentResolver`是客户端(调用方)与`...
【Android Content Provider】是Android系统中的一个重要组件,它主要用于在应用程序之间共享数据。Content Provider作为Android四大组件之一,为其他应用提供了访问私有数据的标准化接口。通过Content Provider,一...
在Android开发中,`android.provider`包是系统提供的一个核心包,主要用于与系统的各种内容提供者(Content Provider)进行交互。这些内容提供者是Android系统数据共享的关键组件,它们允许应用访问并操作如联系人、...
Android Content Provider用法样例,解析如何使用“内容提供商”Content Provider共享不同应用的数据,本Android例子将使用Content Provider实现了获取联系人信息,里面的注释非常丰富,是学习android的好资料。
3. **数据库操作**:Content Provider通常与SQLite数据库配合使用,因此需要创建一个SQLiteOpenHelper子类,用于数据库的创建和升级。例如: ```java public class MyDatabaseHelper extends SQLiteOpenHelper { ...
理解Content Uri的概念和作用,掌握通过Content Provider访问联系人的方法,掌握通过Content Provider访问通话记录的方法,掌握通过Content Provider访问短信的方法。
6. **Content Provider与其他组件的交互** - Intent:Content Provider可以作为Intent的目标,例如启动一个Activity来编辑提供者中的数据。 - Broadcast Receiver:可以监听Content Provider的变更,例如数据插入...
这篇博客“Content Provider的使用”深入探讨了如何在Android开发中利用Content Provider实现数据共享和访问。 Content Provider的核心在于提供一个标准的接口,使得任何应用程序都能够通过URI(Uniform Resource ...
在Android开发中,Content Provider是一种重要的组件,它允许应用程序之间共享数据。`content_provider_demo`是一个展示如何创建和使用Content Provider的示例项目。在这个项目中,开发者将学习如何为其他应用提供...
Android 组件 Content Provider 使用解析 Content Provider 是 Android 四大组件之一,主要作用是实现各个应用程序之间的数据共享。它提供了一种机制,允许不同的应用程序共享数据,实现跨应用程序之间的数据交互。...
`ContentResolver`提供了一套与Content Provider接口一致的API,开发者可以直接使用它来执行CRUD操作,而无需直接实例化Content Provider。 例如,要查询数据,可以这样编写代码: ```java ContentResolver ...
在Android系统中,Content ...掌握Content Provider的使用,不仅可以提升应用的可扩展性,还能提高与其他应用协同工作的效率。通过实际案例操作,如访问和添加联系人,能进一步加深对Content Provider的理解和应用。
### 二、Content Provider注册与使用 1. **注册**:Content Provider需要在AndroidManifest.xml中进行注册,指定其对应的类名和URI。 ```xml <provider android:name=".MyContentProvider" android:authorities=...
在Android系统中,Content Provider是四大组件之一,它扮演着数据共享的角色,使得不同应用程序之间可以安全地访问和操作数据。...理解并熟练掌握Content Provider的使用,对于提升Android开发能力至关重要。
这些项目可能包含一个基础的Content Provider实现以及对应的Activity,用于展示如何通过Content Resolver与Content Provider交互。 总的来说,Content Provider是Android系统中实现跨进程数据共享的核心机制,...
android content provider两个程序共享数据实例demo。简单的两个应用app之间共享数据。 getContentResolver().insert() getContentResolver().query() getContentResolver().delete() getContentResolver().update()
在Android系统中,Content Provider是四大组件之一,它扮演着数据共享的角色,使得不同应用程序间可以安全地访问和操作数据。...同时,掌握Content Provider的使用也能加深对Android系统架构的理解,提高开发效率。