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,给例子展示了如何从已有的电话本中读出联系人信息:
01 package com.android.cp;
02
03 import android.app.Activity;
04 import android.content.ContentResolver;
05 import android.database.Cursor;
06 import android.os.Bundle;
07 import android.provider.Contacts.People;
08 import android.util.Log;
09 import android.widget.Toast;
10
11 public class ContentProviderTest extends Activity {
12 private final String TAG = "ContentProviderTest";
13 /** Called when the activity is first created. */
14 @Override
15 public void onCreate(Bundle savedInstanceState) {
16 super.onCreate(savedInstanceState);
17 Log.i(TAG,"enter onCreate");
18 setContentView(R.layout.main);
19 createCP();
20 }
21
22 public void createCP()
23 {
24 ContentResolver cr = getContentResolver();
25
26 //Cursor cur = managedQuery(People.CONTENT_URI, null, null, null, null);
27
28 Cursor cur = cr.query(People.CONTENT_URI, null, null, null, null);
29
30 getColumnData(cur);
31
32 }
33
34 private void getColumnData(Cursor cur){
35 if (cur.moveToFirst()) {
36
37 String name;
38 String phoneNumber;
39 int nameColumn = cur.getColumnIndex(People.NAME);
40 int phoneColumn = cur.getColumnIndex(People.NUMBER);
41
42 do {
43 // Get the field values
44
45 name = cur.getString(nameColumn);
46 phoneNumber = cur.getString(phoneColumn);
47
48 Log.i(TAG, "name="+name);
49 DisplayToast(name+" "+phoneNumber);
50
51 } while (cur.moveToNext());
52
53 }
54 }
55
56 public void DisplayToast(String s)
57 {
58 Toast.makeText(this,
59 s,
60 Toast.LENGTH_LONG).show();
61 }
62
63 }
需要注意的是,你需要在你的Manifest文件中加上
view sourceprint?
1 <uses-permission
2 android:name="android.permission.READ_CONTACTS">
3 </uses-permission>
否则,程序无法成功运行。
分享到:
相关推荐
NULL 博文链接:https://dampce032.iteye.com/blog/975663
理解Content Uri的概念和作用,掌握通过Content Provider访问联系人的方法,掌握通过Content Provider访问通话记录的方法,掌握通过Content Provider访问短信的方法。
Android中使用Content Provider组件访问通讯录中的联系人和添加联系人案例详解!
Android Content Provider Demo
博文《android基础知识05:四大组件之content provider》的示例程序,实现了content provider 的基本功能。
1、什么是内容提供者 2、怎样创建内容提供者 3、通过内容提供者完成CRUD操作 4、访问内容提供者 5、监听内容提供者数据变化 6、两个案例:监听短信以及操作联系人 最最重要的是包含了源码
主要为大家详细解析了Android组件content provider的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Android Content Provider用法样例,解析如何使用“内容提供商”Content Provider共享不同应用的数据,本Android例子将使用Content Provider实现了获取联系人信息,里面的注释非常丰富,是学习android的好资料。
关于Content Providers Content Providers 是所有应用程序之间数据存储和检索的一个桥梁,作用是使得各个...把18.SQLite和22.22.Content Provider添加到项目中,先运行18.SQLite,然后在进行22.Content Provider测试
NULL 博文链接:https://byandby.iteye.com/blog/837466
content provider实现数据共享demo(内有两个项目)
Android:Content Provider的使用。 1、Content Provider 简介 2、使用现成的Content Provider 3、定义自己的Content Provider 一、Content Provider 简介 我们说Android应用程序的四个核心组件是:Activity、...
两个java库,Unity发布安卓项目经常会有需要。 发包时遇到报错: Didn't find class "androidx.core.content.FileProvider" on path... ...<provider android:name="androidx.core.content.FileProvider
android content provider两个程序共享数据实例demo。简单的两个应用app之间共享数据。 getContentResolver().insert() getContentResolver().query() getContentResolver().delete() getContentResolver().update()
NULL 博文链接:https://ouyangfeng521.iteye.com/blog/1059449
Content provider generator for android that uses annotation processing. All helper classes are generated based on a Java Object. Documentation is WIP. A sample app is provided. Download Gradle: ...
Android应用程序组件Content Provider的共享数据更新通知机制分析
这是使用Content Provider案例源码,详细讲解请移步http://blog.csdn.net/wei_zhi/article/details/52960073
android-simple-content-provider-app 简单的Android Content Provider使用示例