首页
学习
活动
专区
圈层
工具
发布

ContentProvider再探——Document Provider

Contacts Provider:联系人提供者,这个就不用说了,这个用得最多 Storage Access Framework(SAF):存储访问框架,4.4 API 19 以后引入的一个新玩意,为用户浏览手机中的...它是DocumentsProvider的子类,另外,document-provider的存储格式 和传统的文件存储格式一致,至于你的内容如何存储,则完全决定于你自己,Android系统已经内置了几个 这样的...3)流程图: 如上面所述,document provider data是基于传统的文件层次结构的,不过那只是对外的表现形式, 如何存储你的数据,取决于你自己,只要你对外的接口能够通过DocumentsProvider...uri 删除文件: 前提是Document.COLUMN_FLAGS包含SUPPORTS_DELETE DocumentsContract.deleteDocument(getContentResolver...Authority为包名+provider的类型名,如: com.example.android.storageprovider.documents android:exported属性的值为ture

1.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android基础总结(6)——内容提供器

    ,我们在Activity的onCreate()方法为按钮添加点击事件,点击之后调用我们自己写的一个读取联系人的方法readContrast(),在该方法中我们获取系统联系人的存放的Uri,然后通过获取的...我们可以通过新建一个类去继承ContentProvider的方式来创建一个自己的内容提供器。...注意,只有放存在VontentResolver尝试访问我们程序中的数据时,内容提供器才会被初始化。...注意只有当存在ContentResolver尝试访问 33 * 我们程序中的数据时,内容提供器才会被初始化。...你只应该在这个方法中执行快速的初始任务,并且要把数据库的创建和数据的装载延迟到提供器接收到实际的数据请求之后。

    1.4K90

    Android数据存储实现的5大方式

    xml 处理时Dalvik会通过自带底层的本地XML Parser解析,比如XMLpull方式,这样对于内存资源占用比较好。...创建SDCard可以在Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创建,如下: 在Dos窗口中进入android SDK安装路径的tools目录,输入以下命令创建一张容量为2G的SDCard...当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。...外界根本看不到,也不用看到这个应用暴露的数据在应用当中是如何存储的,或者是用数据库存储还是用文件存储,还是通过网上获得,这些一切都不重要,重要的是外界可以通过这一套标准及统一的接口和程序里的数据打交道,...创建你的数据存储系统。大多数Content Provider使用Android文件系统或SQLite数据库来保持数据,但是你也可以以任何你想要的方式来存储。 4.

    4.2K20

    Android学习_ContentProvider和Uri

    /开头, 比如:要得到全部person记录的Uri为content://com.ljq.provider.personprovider/person,那么返回的MIME类型字符串应该为:”vnd.android.cursor.dir...那么MIME类型字符串应该以vnd.android.cursor.item/开头, 比如:得到id为10的person记录,Uri为content://com.ljq.provider.personprovider.../person/10,那么返回的MIME类型字符串为:”vnd.android.cursor.item/person”。...尽管大部分ContentProvider操作的数据都是来自于数据库,可是有时候能够来自于文件、XML或网络等其它的存储方式。...一般来说Content是单例模式,当多个应用程序通过ContentResolver来操作ContentProvider提供的数据时。数据操作会托付给同一个ContentProvider处理。

    68350

    Android 进阶11:进程通信之 ContentProvider 内容提供者

    在通过 ContentResolver 进行数据请求时(比如 contentResolver.insert(uri, contentValues);), 系统会检查指定 URI 的 authority...例如,您可以使用 BLOB 列来存储协议缓冲区或 JSON 结构。 之前反编译微信时,保存朋友圈的数据就是 BLOB 类型。...例如使用 BLOB 列来存储 JSON 创建 ContentProvider 子类,实现关键方法 ContentProvider 实例通过处理来自其他应用的请求来管理对结构化数据集的访问 所有形式的访问最终都会调用...设计数据存储 这里我们使用 SQLite 存储数据,创建一个数据库帮助类: public class DbOpenHelper extends SQLiteOpenHelper { private...在 ContentProvider 中可以通过 UriMatcher 来为不同的 URI 关联不同的 code,便于后续根据 URI 找到对应的表。

    3.1K100

    Android进程间通信(五):进程间通信的方式之ContentProvider

    小结 ---- 简介 前面我们介绍了: 进程间通信基础介绍 通过AIDL介绍Binder的工作机制 通过 Bundle、文件共享、Messenger实现进程间通信 进程间通信的方式之AIDL...onCreate() 代表ContentProvider的创建,getType(...)...用来返回一个Uri请求所对应的 MIME类型,如果我们不关心这个可以直接返回 null 或者 */*,query(...)、insert(...)、delete(...)、update(...)...); //参数为 “content://authorities” authorities为manifest中注册的 Uri uri = Uri.parse("content...三次查询操作则运行在不同的非UI线程中。 接下来我们来完善 TestProvider 来实现访问 日程安排 的功能。 首先我们来创建保存数据用的数据库。

    96420

    Android学习--跨程序共享数据之内容提供其探究

    不同于文件存储和SharePreferences存储中的两种全局可读性操作模式,内容提供器可以选择只对那一部分数据进行共享,从而保证我们程序中的隐私数据不糊有泄漏的风险。      ...-ContentResolver ----       对于每一个应用程序来说,如果你想要访问内容提供器当中共享的数据,就一定要借助 ContentResolver 类,可以通过Context类当中的getContentResolver...selectionArgs,                为where中的占位符提供具体的值                                sortOrder);                    ...new ArrayAdapter(ContactsActivity.this, android.R.layout.simple_list_item_1, list);...,返回false表示失败,注意的是只有当ContentResolver尝试访问我们的数据库的时候内容提供器才会被初始化       query()       从内容提供器中查询数据,使用uri参数来确定查询哪张表

    84730

    Android ContentProvider实例详解

    Android的数据存储方式总共有五种,分别是:Shared Preferences、网络存储、文件存储、外储存储、SQLite。...而且Android为常见的一些数据提供了默认的ContentProvider(包括音频、视频、图片和通讯录等)。...2URL URL(统一资源标识符)代表要操作的数据,可以用来标识每个ContentProvider,这样你就可以通过指定的URI找到想要的ContentProvider,从中获取或修改数据。...D:指向特定的记录,这里表示操作user表id为7的记录。如果要操作user表中id为7的记录的name字段, D部分变为 /7/name即可。...Android中类型已经固定好了,不能更改,只能区别是集合还是单条具体记录,子类型可以按照格式自己填写。 在使用Intent时,会用到MIME,根据Mimetype打开符合条件的活动。

    2.7K20

    Android四大组件之ContentProvider

    话不多说,让我们赶紧开始学习吧~ 简介 ContentProvider是Android系统中为开发者专门提供的不同应用间进行数据共享的组件,其提供了一套标准的接口用来获取以及操作数据,准许开发者把自己的应用数据根据需求开放给其他应用进行增删改查...public abstract ContentResolver getContentResolver(); 所以可以在所有继承Context的类中通过 getContentResovler() 方法获取...authorities:自定义ContentProvider的唯一标识,外部应用通过该属性值来访问我们的ContentProvider。因此该属性值必须是唯一的,建议在命名时以包名为前缀。...3 Uri 观察MyContentProvider中的几个方法,可以发现除了 onCreate() 方法外,其它五个抽象方法都包含了一个Uri(统一资源标识符)参数,通过这个对象可以来匹配对应的请求。...首先,自定义一个ContentProvider,然后向其写入和读取数据,使用SQLite作为ContentProvider的数据存储地址和数据来源,因此需要先建立一个SQLiteOpenHelper,创建一个名为

    80120

    Android数据存储实现的5大方式

    Android数据存储实现的5大方式 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,更加系统详细的介绍了5种存储的方法和异同。...xml 处理时Dalvik会通过自带底层的本地XML Parser解析,比如XMLpull方式,这样对于内存资源占用比较好。...创建SDCard可以在Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创建,如下: 在Dos窗口中进入android SDK安装路径的tools目录,输入以下命令创建一张容量为2G的SDCard...当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。...().delete(uri, null, null); } 你也可以指定WHERE条件语句来删除特定的记录: getContentResolver().delete(uri, “NAME=

    7.9K90

    一篇文章实现Android图片拼接并保存至相册

    前言 好久没有写Android系列的文章了,最近有小伙伴问到了Android图片拼接的问题,写一篇相关的博客。...实现功能 检查并请求必要的存储权限 允许用户从相册选择一张或多张图片 异步加载选中的图片 使用ImageStitcher类拼接图片 将拼接后的图片保存到相册 在整个过程中显示适当的进度指示和操作反馈 类定义和成员变量...,高度为所有图片中的最大高度 纵向拼接:总高度为所有图片高度之和,宽度为所有图片中的最大宽度 创建并绘制拼接后的图片 // 创建拼接后的Bitmap Bitmap result...} } 绘制过程 创建一个新的空白Bitmap,大小为之前计算的总尺寸 使用Canvas在这个Bitmap上绘制所有输入图片 根据拼接方向,依次将每张图片绘制到正确的位置 更新当前位置指针(currentPos...),以便下一张图片绘制在正确的位置 注意事项 所有输入图片应为非空且尺寸相同(代码中未做严格检查) 拼接方向通过简单的int值判断(0为横向,非0为纵向) 使用了ARGB_8888配置创建Bitmap,

    31810

    Carson带你学Android:关于ContentProvider的知识都在这里了!

    若ContentProvider的数据存储方式是内存,则需要自己实现线程同步 public boolean onCreate() // ContentProvider创建后...(Uri uri) // 得到数据类型,即返回当前 Url 所代表数据的MIME类型 Android为常见的数据(如通讯录、日程表等)提供了内置了默认的ContentProvider 但也可根据需求自定义...Context的类中 通过调用getContentResolver()来获得ContentResolver ContentResolver resolver = getContentResolver(...2创建完毕 源码地址 Carson-Ho Github地址:ContentProvider2 结果展示 在进程展示时,需要先运行准备数据的进程1,再运行需要访问数据的进程2 运行准备数据的进程1 在进程...而采用ContentProvider方式,其 解耦了 底层数据的存储方式,使得无论底层数据存储采用何种方式,外界对数据的访问方式都是统一的,这使得访问简单 & 高效 如一开始数据存储方式 采用 SQLite

    64910

    Android:关于ContentProvider的知识都在这里了!

    若ContentProvider的数据存储方式是内存,则需要自己实现线程同步 public boolean onCreate() // ContentProvider创建后...(Uri uri) // 得到数据类型,即返回当前 Url 所代表数据的MIME类型 Android为常见的数据(如通讯录、日程表等)提供了内置了默认的ContentProvider 但也可根据需求自定义...Context的类中 通过调用getContentResolver()来获得ContentResolver ContentResolver resolver = getContentResolver(...2创建完毕 源码地址 Carson-Ho Github地址:ContentProvider2 ---- 结果展示 在进程展示时,需要先运行准备数据的进程1,再运行需要访问数据的进程2 1....而采用ContentProvider方式,其 解耦了 底层数据的存储方式,使得无论底层数据存储采用何种方式,外界对数据的访问方式都是统一的,这使得访问简单 & 高效 如一开始数据存储方式 采用 SQLite

    3.1K43

    Android 11 应用兼容性适配,看这篇就够了

    ,”w”,null); 1.3.2.1.8.删除文件 通过ContentResolver接口删除文件,Uri为query出来的Uri: getContentResolver().delete(contentUri...● 如果应用未选择停用分区存储,并且请求 READ_EXTERNAL_STORAGE 权限,则用户会看到不同于 Android 10 的对话框。该对话框会指示应用正在请求访问相册和多媒体。...3 如果尝试请求ACCESS_BACKGROUND_LOCATION,同时请求任何其他权限,系统会抛出一个异常。(只针对sdk为android 11),具体表现为闪退。...2 兼容性影响 如果您的应用目标Sdk为R则堆指针标记默认开启,目标SDK低于R时,默认关闭。 使用如下命令开启或关闭此特性,查看您的应用是否有错误的使用指针场景。...2 兼容性影响 如果您的APP需要使用Mac地址作为设备的标识,无论您的Target SDK是否设置为R,只要运行在Android 11上,您就需要进行适配。

    15.1K42
    领券