Android自定义内容提供者使用

Android之内容提供者(ContentProvider) 内容提供者(ContentProvider)是Android四大组件之一,用于在不同应用之间共享数据。内容提供者通过统一资源标识符(URI)来标识数据,并使用一套标准的接口来访问和操作数据。它是Android系统中实现跨应用数据共享的主要方式。 阅读详情
    在android 中,我们们常常会使用到内部数据库,同时又希望自己的部分数据可以被其他应用程序访问到,我们可以通过自定义内容提供者来实现这个功能。想访问到contentProvider,提供的数据需要两个条件一是 程序的uri,二是获得contentResolver 对象,getContentResolver()所调用的方法其实是调用的 contentProvider 内部实现的方法 。
/**
 * Description: 把当前应用下的私有数据库 提供给外界<br/>
 * Copyright (c) , 2016, Jansonxu <br/>
 * This program is protected by copyright laws. <br/>
 * Program Name:UserContentProvider.java <br/>
 * Date: 2016年3月9日
 * 
 * @author 李阳
 * @version : 1.0
 */
package com.example.contentprovider.provider;



import com.example.contentprovider.util.Dbhelper;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;

public class UserContentProvider extends ContentProvider {

    //① 定义该 ContentProvider 组件的唯一标识  通常用包名 + 数据库名来命名 必须小写(保证唯一。包名是唯一的)
    // 包名在清单上边 就能看到
    public static final String AUTHORITY = "com.example.contentprovider.user_1";

    //② 为该组件中可以被其他应用访问的表 定义 CODE标识
    public static final int CODE_USER = 1;
    public static final int CODE_ORDER = 2;

    //③ 定义UriMatcher 对象  之前有用到过  
    public static UriMatcher uriMatcher;  //用于生成uri

    //静态代码块 随着类的加载而执行 
    static{

        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);//

        //为 t_user 表生成Uri  content://com.example.contentprovider.user_1/user
        uriMatcher.addURI(AUTHORITY, "user", CODE_USER); //path 自己随便定的

        uriMatcher.addURI(AUTHORITY, "order", CODE_ORDER); //path 自己随便定的


    }

    /* 
     * 
     */

    private Dbhelper dbHelper;
    @Override
    public boolean onCreate() {

        // 初始化
        dbHelper = new Dbhelper(getContext());

        return false;
    }

    /* (non-Javadoc)
     * @see android.content.ContentProvider#query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String)
     */
    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {

        int code =  uriMatcher.match(uri);// 返回的是 uri 对应的code 标识
        Cursor cursor = null;

        SQLiteDatabase db = dbHelper.getReadableDatabase();

        switch (code) {

        case CODE_USER:



            //有问题  这个 t_user 是表名的话 前边 那个建立对应关系  User 是什么 
            cursor = db.query("t_user", projection, selection, selectionArgs, null, null, sortOrder);

            break;

        case CODE_ORDER:

            break;

        default:
            break;
        }

        return cursor;
    }



    /* (non-Javadoc)
     * @see android.content.ContentProvider#getType(android.net.Uri)
     */
    @Override
    public String getType(Uri uri) {
        // TODO Auto-generated method stub
        return null;
    }

    /* (non-Javadoc)
     * @see android.content.ContentProvider#insert(android.net.Uri, android.content.ContentValues)
     */
    @Override
    public Uri insert(Uri uri, ContentValues values) {

        SQLiteDatabase db = dbHelper.getWritableDatabase();
        if(uriMatcher.match(uri)==UserContentProvider.CODE_USER){
            long id = db.insert("t_user", null, values);
              return ContentUris.withAppendedId(uri, id);
        }

        return null;
    }

    /* (non-Javadoc)
     * @see android.content.ContentProvider#delete(android.net.Uri, java.lang.String, java.lang.String[])
     */
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {

        SQLiteDatabase db = dbHelper.getWritableDatabase();
        int num = 0;
        if(uriMatcher.match(uri)==UserContentProvider.CODE_USER){
            num = db.delete("t_user", selection, selectionArgs);
        }
        return num;

    }

    /* (non-Javadoc)
     * @see android.content.ContentProvider#update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[])
     */
    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {

        SQLiteDatabase db = dbHelper.getWritableDatabase();
        if(uriMatcher.match(uri)==UserContentProvider.CODE_USER){

            db.update("t_user", values, selection, selectionArgs); 

        }



        return 0;
    }


}
自定义内容提供者源码 自定义内容提供者示例源码 立即下载

相关推荐

Android中ContentProvider(内容题供着)2访问自定义的内容提供者,共享Sqlite数据库数据

ContentProvider(内容提供者)主要用于跨项目访问(操作)数据。 这个项目就是自定义内容提供者,供别的项目访问。

自定义内容提供者

说明: - Uri uri = Uri.parse("content://后面是提供方清单文件中的值");,其中”content://”一定要加 - 内容索取方可以新建项目来编写,这样可以更好的体验内容提供者跨app的作用

amynn的博客 538

Android中ContentProvider(内容题供着)1访问系统的内容提供者

ContentProvider(内容提供者)主要用于跨项目访问(操作)数据。 这是调用系统的内容题供者

Android(4、ContentProvider内容提供者)

➢ContentProvider为App存取内部数据提供统- -的外部接口,让不同的应用之间得以共享数据。A应用。

yiyuanpeng2004的博客 1364

AI Agent核心架构解析:从Tool、Skill到MCP协议的智能体构建实战

在人工智能领域,大语言模型(LLM)赋予了AI自主规划与决策的能力,推动了智能体(Agent)技术的演进。其核心原理在于构建一个具备感知、规划、行动与反思能力的自主系统。这一架构的技术价值在于将AI从被动应答升级为主动执行复杂任务的工作伙伴,显著提升了自动化水平与问题解决效率。应用场景广泛覆盖了市场分析、自动化办公、智能客服与垂直领域集成等。本文聚焦于实现这一能力的关键组件:基础工具(Tool)、组合技能(Skill)与标准化协议(MCP)。其中,Skill通过封装多个Tool形成可复用的高级能力,而MCP

chuannaoxuan4674的博客 322

ARM64麒麟V10系统下PyTorch离线安装全攻略(附资源下载)

本文详细介绍了在ARM64架构的银河麒麟V10操作系统上,如何通过离线方式成功安装PyTorch深度学习框架。文章提供了从系统环境准备、依赖梳理、离线资源获取与验证,到分步安装、避坑指南及安装后验证的完整流程,并附有资源下载建议,旨在帮助开发者在国产化环境中高效部署AI开发平台。

metal的博客 748

Android中的内容提供者

安卓中的内容提供者ContentProvider,案例:读取手机通信录

. 1330

STC8G1K08A 实战应用:从配置到功能实现

本文详细介绍了STC8G1K08A单片机的实战应用,从开发环境搭建、GPIO配置、ADC模块使用到定时器中断处理和PWM输出等核心功能。重点讲解了外设模块的协同工作配置技巧,并分享了实际项目开发中的经验教训,帮助开发者快速掌握STC8G1K08A的高效应用。

n4o5p6q7r的博客 392

内容提供者——fragment

学习ContentProvider 与fragment

Meikos的博客 538

Unidbg逆向阿里系App签名:从环境补全到算法还原实战

在移动安全与协议分析领域,理解应用层签名机制是核心挑战之一。签名算法作为保障通信安全与身份验证的关键技术,其原理通常涉及哈希、加密及密钥协商等基础密码学概念。在Android平台,核心签名逻辑常被加固并隐藏于Native层SO库中,以对抗动态调试与静态分析,这为安全研究和协议兼容带来了技术障碍。Unidbg作为一种基于模拟执行的逆向工程工具,通过模拟ARM指令集和系统调用,允许研究者在脱离真机环境的情况下,可控地执行和调试SO文件,为解决此类问题提供了创新思路。其技术价值在于实现了对加固代码的确定性分析与算

weixin_42525738的博客 940

SAP PO开发-端到端配置

1.登录PO系统,选择system landscape,将外围系统的系统信息(Software Component以下简称SC)注册到PO系统中。2.点击products注册外围系统信息。3.选择New 新建 按钮:创建一个新的系统和版本。4.输入产品名称、供应商、版本号等信息。然后点击:Next。5.设置instance 名称,然后点击Next。6.最后设置软件组件的名称,然后点击Finish。

P9QCer的博客 1581

Android内容提供者使用及创建

先介绍一下,ContentProvider可以进行应用间的数据交换,即向其他应用暴露自己想暴露的数据。 实际应用中大多数情况下应该是使用Android系统自带的内容提供者来向Android自带的数据库(短信,联系人,通话记录等等)进行操作。 (一)先给大家介绍一个简单的内容提供者的实现及使用。 1 需要建立一自己的Provider 继承ContentProvider 下面是自己的...

diaohun4437的博客 587

HyperLynx(二十二)DDR(五)DDRx总线时序模型设计

DDR3 的数据选通信号与时钟信号的频率是一样的,在数据选通信号写操作时,控制器典型的输出方式是数据选通信号边沿与时钟近似对齐。该界面中显示了所有需要编辑的参数,包括地址/命令信号的时序、控制信号的时序、读和写操作的数据选通和数据信号时序、写操作的数据选通和数据掩码信号时序,以及建立和保持时间的降额参数。由于DDRx总线对时序的要求非常严格,随着速率的提升,时序的要求会更高。反之也是一样的,如果数据选通信号的上升沿在时钟信号上升沿的后面到达 DRAM,那么数据选通信号的下降沿就会在时钟信号的前面到达。

小幽余生不加糖 1938

Android 程式开发:(二十)内容提供者 —— 20.6 自定义ContentProvider的使用

现在,ContentProvider已经创建好了,可以去尝试使用一下。 1. 使用之前的工程,在布局文件main.xml中添加一些控件。   &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

weixin_34345560的博客 131

LLC变压器,常见的4大问题解决方案

其中之一是当付边的绕组的匝数或层数较多的时候,层间或匝间寄生电容和付边的漏感发生一个寄生的振荡,轻载的时候,这个振铃的幅度会达到很高,导致输出电压比设计的要高许多。但当输入是低压的时候,开关频率比较低,LLC谐振回路的增益较大,因而比较容易发生变压器饱和的问题。由于LLC变压器工作在LC谐振状态,LC谐振回路有个特点就是Q值问题,在这里Q值是大于1的,因而就会有实际加在变压器上的电压要比输入电压高的问题,因而在设计变压器的时候就必须考虑到这一点,否则变压器就不是工作在你设计的磁感应强度上。

1266

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

android内容提供者

内容提供者 应用的数据库是不允许其他应用访问的 内容提供者的作用就是让别的应用访问到你的数据库 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查数据库的代码,举例增方法@Override public Uri insert(Uri uri, ContentValues values) { db.insert("person", null, valu

Han_list的博客 478

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

安卓四大组件之内容提供者

内容提供者ContentProvider,是Android 的四大组件之一。内容提供者是应用程序之间共享数据的接口。应用程序创建的数据库,默认情况下是私有的,别的应用程序访问不到数据,如果想把数据对外提供,就要用到内容提供。ContentProvider屏蔽了数据存储的细节,内部实现对用户完全透明, 用户只需要关心操作数据的uri就可以了,ContentProvider可以...

weixin_30588729的博客 199

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

内容提供者总结

内容提供者 应用的数据库是不允许其他应用访问的 内容提供者的作用:把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用 内容提供者的作用就是让别的应用访问到你的数据库,相当于一个应用的接口,用来被其他应用来访问,内容提供者可以访问本应用的所有的数据,内容提供者对外只提供本应用可以暴露的数据。 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查数

开源创新 819

内容提供者

1、内容提供者(掌握) * 应用的数据库是不允许其他应用访问的 * 内容提供者的作用就是让别的应用访问到你的私有数据 * 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查数据库的代码,举例增方法   @Override   public Uri insert(Uri uri, ContentValues values) {    db.ins

riendfly的博客 339

Android——内容提供者

Android——内容提供者 内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,内容提供器可以选择只对哪一部分数据进行共享,从而保证我们程序中的隐私数据不会有泄漏的风险。 内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序中的数据,另一种是创建自己的内容提供器给我们程序的数据提供外部访问接口。 访问其他程序中的数据 Android 系统中自带的电话簿、短信、媒体库等程序都提供了外部访问接口 。 ContentResolver 的基本用

菜菜的博客 536

Android的内容观察者、通知、内容提供者

一、内容提供者的作用 1. 应用成需创建的数据库文件,默认都是私有的,其他应用程序不具备读写权限 2. 如果真的想把自己的数据库数据暴露给其他程序访问,那么就应该通过内容提供者来暴露。 3. 与aidl有点类似,但不太一样,aidl是提供内存中的数据给其他应用访问,内容提供者是提供磁盘中的数据给其他应用访问。 二、使用内容提供者的步骤 1. 自定义一个类,继承ContentProvi

yangguoyu8023的博客 1614

Android内容提供者

内容提供者 应用的数据库是不允许其他应用访问的 内容提供者的作用就是让别的应用访问到你的数据库 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查数据库的代码,举例增方法@Override public Uri insert(Uri uri, ContentValues values) { db.insert("person", null, valu

C. 508

安卓day34内容提供者

一、排坑 短信操作崩溃 https://blog.youkuaiyun.com/dodod2012/article/details/78327509 编码的转换问题,短信中的那种表情(自带的除外)不能正常的转换utf-8格式字符,导致备份失败, 二、内容提供者 应用的数据库是不允许其他应用访问的 内容提供者的作用就是让别的应用访问到你的数据库 自定义内容提供者,继承ContentProv...

weixin_30875157的博客 135
上一篇: Android 继承SqLiteOpenHelper 实现内部数据库
下一篇: Android ContentResolver 优化方案之 loader
一朵红杏
博客等级 码龄12年 51粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值