原文链接: http://www.cnblogs.com/zzl521/p/8846448.html

先介绍一下,ContentProvider可以进行应用间的数据交换,即向其他应用暴露自己想暴露的数据。

实际应用中大多数情况下应该是使用Android系统自带的内容提供者来向Android自带的数据库(短信,联系人,通话记录等等)进行操作。

(一)先给大家介绍一个简单的内容提供者的实现及使用。

1 需要建立一自己的Provider 继承ContentProvider

下面是自己的一个AccountProviderr的实现:

只实现了一个查询的方法

package com.example.day09_pracontentprovider;import android.content.ContentProvider;import android.content.ContentValues;import android.content.UriMatcher;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.net.Uri;public class AccountProviderr extends ContentProvider{    private MyOpenHelper myOpenHelper;   //自定义的数据库    private static final int QUERYSUCCESS = 0; //定义的常量用来匹配要进行的操作    // 1 路径匹配器    private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);    // 2 静态代码块 添加匹配规则    static{        //        url      http://www.baidu.com//        uri:         com.zyf.provider/query        sURIMatcher.addURI("com.zyf.provider", "query", QUERYSUCCESS);    }        @Override    public boolean onCreate() {        myOpenHelper=new MyOpenHelper(getContext());        return false;    }    @Override    public int delete(Uri arg0, String arg1, String[] arg2) {        // TODO Auto-generated method stub        return 0;    }    @Override    public String getType(Uri arg0) {        // TODO Auto-generated method stub        return null;    }    @Override    public Uri insert(Uri arg0, ContentValues arg1) {        // TODO Auto-generated method stub        return null;    }   public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {      int code=sURIMatcher.match(uri);   //获取Uri的匹配码        if (code == QUERYSUCCESS) {       //如果匹配 进行查询 返回 查询结果cursor            SQLiteDatabase db=myOpenHelper.getReadableDatabase();            Cursor cursor = db.query("info", null, null,null,null, null, null);            System.out.println("我是内容提供者的");            return cursor;//Returns:A Cursor object, which is positioned before the first entry.        } else{                          // 不匹配 返回null            return null;        }    }    @Override    public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {        // TODO Auto-generated method stub        return 0;    }}

这里要注意在清单文件中声明自己创建的内容提供者时要将android:exported="true"

       android:authorities="com.zyf.provider"          android:exported="true">

下面是一个MyOpenHelper类

import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class MyOpenHelper extends SQLiteOpenHelper{    public MyOpenHelper(Context context) {        super(context, "info.db", null, 1);    }    @Override    public void onCreate(SQLiteDatabase arg0) {        arg0.execSQL("create table info (_id integer primary key autoincrement,name varchar(20)," +                "phone varchar(20),number varchar(20))");    }    @Override    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {            }}

在另一个应用中使用上面建立的内容提供者

import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.database.Cursor;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                Uri uri=Uri.parse("content://com.zyf.provider/query");        Cursor cursor=getContentResolver().query(uri, null, null,null, null);                if(cursor !=null && cursor.getCount()>0){            while(cursor.moveToNext()){                String name=cursor.getString(1);                String phone=cursor.getString(2);                System.out.println("-----name"+name+"------"+phone);            }        }    }}

(二)使用Android系统自带的Provider

使用Android自带的内容提供者其实相当的简单

                Uri uri=Uri.parse("content://sms");    //uri在Android的源码中可以查看
ContentValues values=new ContentValues(); values.put("address", "132454854"); values.put("date", System.currentTimeMillis()); values.put("body", "I am message body"); getContentResolver().insert(uri, values);//获取内容提供者并插入

这样几行代码便实现了向你的手机中添加一条信息。

内容有问题请大家告知我,我会在第一时间内进行更改哦

 

转载于:https://www.cnblogs.com/zzl521/p/8846448.html

更多相关文章

  1. 解决eclipse中执行程序提示“Your project contains error(s),ple
  2. Frida入门学习笔记-hook native中的函数(1)
  3. Android(安卓)手机震动调用
  4. mono for android 第四课--提示框
  5. Android手机AP模式下本机IP
  6. Android提供两个常用的消息弹出框【Toast和Alert】
  7. Android应用开发之获取web服务器xml数据
  8. 在Android程序代码中实现软件安装和卸载
  9. 新版Eclipse中关联查看Android(安卓)源代码和android-support-v4

随机推荐

  1. 手把手带你爬天猫,获取杜蕾斯评论数据
  2. Oracle19c_cdb数据库自动安装部署脚本
  3. 当谈论迭代器时,我谈些什么?
  4. Python 之父撰文回忆:为什么要创造 pgen
  5. 从 Python 之父的对话聊起,关于知识产权、
  6. Python 为了提升性能,竟运用了共享经济
  7. 如何美观地打印 Python 对象?这个标准库可
  8. Python 浮点数的冷知识
  9. 金牌厨师Pandas:听说Excel处理数据分行快
  10. 由浅入深:Python 中如何实现自动导入缺失