使用ContentProvider(内容提供者)共享数据 ContentProvider 在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问...,其他应用可以通过ContentProvider 对你应用中的数据进行添删改查。...是这样的,如果采用文件操作模式对外共享数据,数据的访问方式会因数据存储的方式而不同,导致数据的访问方式无法统一,如:采用xml文件对外共享数据,需要进行xml解析才能读取数据;采用sharedpreferences...类来完成,要获取ContentResolver 对象,可以使用Activity提供的getContentResolver()方法。...如果ContentProvider的访问者需要知道ContentProvider中的数据发生变化,可以在ContentProvider 发生数据变化时调用getContentResolver().notifyChange
在注释1处通过acquireUnstableProvider方法返回IContentProvider类型的unstableProvider对象,在注释2处调用unstableProvider的query...注释1处通过getProcessRecordLocked方法来获取目标ContentProvider的应用程序进程信息,这些信息用ProcessRecord类型的proc来表示,如果该应用进程已经启动就会调用注释...注释1处通过prepareMainLooper方法在ThreadLocal中获取Looper,并在注释3处开启消息循环。...到目前为止,上面的调用过程还是在AMS进程中执行的,因此,需要通过IBinder类型的mRemote对象向新创建的应用程序进程(目标Content Provider所在的进程)发送BIND_APPLICATION_TRANSACTION...处理这个通信请求的是在新创建的应用程序进程中执行的ApplicationThread的bindApplication方法,如下所示。
Android四大组件之ContentProvider ContentProvider 安卓应用程序默认是无法获取到其他程序的数据,这是安卓安全学的基石(沙盒原理)。...可以简单的理解为,内容提供者就是一个可以在不同应用程序间共享数据的组件,相当于一个中间人,一个程序把数据暴露给这个中间人,另一个则通过这个中间人获取相应的数据....设置成自己的成员变量中记录, 所以对于获取getContext的时候只能放在方法内,不能放到成员位置,因为在成员上时是null,而在方法内调用时该类就会已经初始化完了 ContentProvider...// 如果不一致,则会导致对应的Activity无法启动。...并获取里面的数据 public void query(View view){ //得到内容提供者的解析器 中间人 ContentResolver resolver = getContentResolver
把数据库从设备上考出来,你可以使用 adb pull 命令(或者在 IDE 上做相应操作)。 存储一个修改过的数据库到设备上,使用 adb push 命令。...第四种: 使用ContentProvider存储数据 Android这个系统和其他的操作系统还不太一样,我们需要记住的是,数据在Android当中是私有的,当然这些数据包括文件数据和数据库数据以及一些其他类型的数据...,我们可以通过迭代这个游标来获取所有的数据: Java代码 ?..._data的字段,_data字段列出了该文件在Android文件系统上的精确路径。...第五种: 网络存储数据 前面介绍的几种存储都是将数据存储在本地设备上,除此之外,还有一种存储(获取)数据的方式,通过网络来实现数据的存储和获取。
使用系统提供的ContentProvider 其实很多时候我们用到ContentProvider并不是自己暴露自己的数据,更多的时候通过 ContentResolver来读取其他应用的信息,最常用的莫过于读取系统...如果你想来调用这些ContentProvider就需要自行查阅相关的API资料了! 另外,不同的版本,可能对应着不同的URL!...ContentResolver resolver = getContentResolver(); //获取的是哪些列的信息 Cursor cursor = resolver.query...; resolver.insert(uri, conValues); } 注意事项: 上述代码在4.4以下都可以实现写入短信的功能,而5.0上就无法写入,原因是: 从5.0开始,默认短信应用外的软件不能以写入短信数据库的形式发短信...使用指南: 运行程序后,晾一边,收到短信后,可以在logcat上看到该条信息的内容,可以根据自己的需求 将Activtiy改做Service,而在后台做这种事情~ 小结 关于ContentProvider
App运行模式 在Android 11版本上,系统会根据App targetSdkVersion决定运行模式: ● App targetSdkVersion >= 30,默认为分区存储,并且无法取消...获取所有的Volume 对于前面描述的Uri中,getContentUri如何获取所有,可以通过下述方式: 1.3.2.1.2.Uri跟公共目录关系 MediaProvider...,”w”,null); 1.3.2.1.8.删除文件 通过ContentResolver接口删除文件,Uri为query出来的Uri: getContentResolver().delete(contentUri...在Android 11 版本上,需要通过声明MANAGE_EXTERNAL_STORAGE权限来获取“Allowed for all files(允许存储所有文件)”权限,进行功能实现。...2 兼容性影响 用户无法在搭载Android 11的设备上安装或更新仅通过APK签名方案v1 签名的应用。
Context.getContentResolver()获取ContentResolver对象。...,在Activity中使用ContentResolver,通过URI来访问上面的(不同应用中)ContentProvider。...二、调用系统的ContentProvider 除了我们自己创建ContentProvider,Android系统也给我们提供了丰富的ContentProvider接口,这里就以操作系统的联系人为例来说明一下怎使用系统提供的...1、查询系统联系人 通过系统联系人的Uri获取系统联系人及手机号码: public void query() { showContact = ""; // 获取联系人的Cursor集合...)); // 获取当前联系人id下的所有电话号码 Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI
类上加多了一个 ContentResolver类对所有的ContentProvider进行统一管理。...) 实例说明 // 使用ContentResolver前,需要先获取ContentResolver // 可通过在所有继承Context的类中 通过调用getContentResolver()来获得ContentResolver...://cn.scu.myprovider/user"); // 根据URI 操作 ContentProvider中的数据 // 此处是获取ContentProvider中 user表的所有记录 Cursor.../user/7") long personid = ContentUris.parseId(uri); //获取的结果为:7 4.6 UriMatcher类 作用 在ContentProvider...// 该方法在最下面 String table = getTableName(uri); // // 通过ContentUris类从URL中获取ID /
若ContentProvider的数据存储方式是使用SQLite & 一个,则不需要,因为SQLite内部实现好了线程同步,若是多个SQLite则需要,因为SQL对象之间无法进行线程同步 // b....) 实例说明 // 使用ContentResolver前,需要先获取ContentResolver // 可通过在所有继承Context的类中 通过调用getContentResolver()来获得ContentResolver...://cn.scu.myprovider/user"); // 根据URI 操作 ContentProvider中的数据 // 此处是获取ContentProvider中 user表的所有记录.../user/7") long personid = ContentUris.parseId(uri); //获取的结果为:7 4.6 UriMatcher类 作用 在ContentProvider...// 该方法在最下面 String table = getTableName(uri); // // 通过ContentUris类从URL中获取ID /
具体哪些独立的数据可以占一行,可以在mimetypes这张表中找到, 原生Android的系统 一共12种,例如name,phone,email ect.....大部分情况下这两层的数据时指同一个联系人的信息,即他们俩是一一对应的关系,但是有些特殊 情况,这个我是查了一些老外的论坛加上自己的理解,例如 我做一个本地通信录和网络上的通信录同步的时候,可能有一个人他在本地存在...3 Uri dataUri = Uri.parse (“content://com.android.contacts/data”); data表 Ø 该表保存了所有创建过的手机测联系人的所有信息,每个字段占一行...Ø 联系人的所有信息保存在列data1至data15中,各列中保存的内容根据MimeTypeID的不同而不同。..._id Cursor query = getContentResolver().query(uri, new String[]{"_id"}, null, null, null);
话不多说,让我们赶紧开始学习吧~ 简介 ContentProvider是Android系统中为开发者专门提供的不同应用间进行数据共享的组件,其提供了一套标准的接口用来获取以及操作数据,准许开发者把自己的应用数据根据需求开放给其他应用进行增删改查...public abstract ContentResolver getContentResolver(); 所以可以在所有继承Context的类中通过 getContentResovler() 方法获取...authorities:自定义ContentProvider的唯一标识,外部应用通过该属性值来访问我们的ContentProvider。因此该属性值必须是唯一的,建议在命名时以包名为前缀。...().insert(articleUri, contentValues); Cursor articleCursor = getContentResolver().query(articleUri...().insert(authorUri, contentValues); Cursor authorCursor = getContentResolver().query(authorUri
App运行模式 在Android 11版本上,系统会根据App targetSdkVersion决定运行模式: ● App targetSdkVersion >= 30,默认为分区存储,并且无法取消。...获取所有的Volume 对于前面描述的Uri中,getContentUri如何获取所有,可以通过下述方式: 1.3.2.1.2.Uri跟公共目录关系 MediaProvider...,"w",null); 1.3.2.1.8.删除文件 通过ContentResolver接口删除文件,Uri为query出来的Uri: getContentResolver().delete(contentUri...在Android 11 版本上,需要通过声明MANAGE_EXTERNAL_STORAGE权限来获取“Allowed for all files(允许存储所有文件)”权限,进行功能实现。...2 兼容性影响 用户无法在搭载Android 11的设备上安装或更新仅通过APK签名方案v1 签名的应用。
= getContext().getContentResolver().query(uri2, null, null, null, null); Tools.printCursor(query);...= getContext().getContentResolver().query(uri, null, null, null, null); Tools.printCursor(query);...null; } else { // cursor 返回时,默认指向的是 第一行的上一行,即 -1 行 ,而所有的数据是从 第 0行开始的。...} else { // cursor 返回时,默认指向的是 第一行的上一行,即 -1 行 ,而所有的数据是从 第 0行开始的。...; } /** * 通过联系人的ID,查询联系人的头像 * * @param ctx * @param contactId * @return 返回 bitmap 头像, 如果此联系人没有头像的话
概述 通过ContentProvider初探相信你已经知道如何去使用系统提供的ContentProvider或者自定义ContentProvider了, 已经基本满足日常开发的需求了,有趣的是,我在官方文档上看到了另外这几个...Uri你可以知道什么,而Uri的获取则是通过SAF得到的!...下面介绍自定义DocumentsProvider的步骤: API版本为19或者更高 在manifest.xml中注册该Provider Provider的name为类名加包名,比如: com.example.android.storageprovider.MyCloudProvider...当然,这个是4.4 或者以上版本的~!...如果是以前的版本:uri可能是这样的: content://media/external/images/media/image%3A69983 别人总结的Android4.4中获取资源路径问题 public
1.ContentProvider简单介绍 在Android中有些数据(如通讯录、音频、视频文件等)是要供非常多应用程序使用的。...比如非常多音乐播放器中的扫描功能事实上就用到了Content Provider功能(当然,也有的播放器是自己去实现更底层的功能)。...public boolean onCreate() 在创建ContentProvider时调用 public Cursor query(Uri, String[], String, String[],...用于获取ContentResolver对象。...以下通过两个实例来解说ContentProvider的使用方法,第一个实例是自定义了一个ContentProvider而且在还有一个应用中读取它。第二个实例是读取当前手机中的联系人。
[] projection, String selection, String[] selectionArgs, String sortOrder) 查询给定的URI,在结果集上返回一个Cursor。...传递null将返回给定URI的所有行。 selectionArgs String: 您可以在选择中包含?s,它将被selectionArgs中的值替换,它们将在选择中出现。这些值将绑定为字符串。...,所以可以直接通过内容的解析者进行访问 // 拿到内容的解析者,直接通过上下文获取 public void click(View view) { switch (view.getId...及以上是无法实现的了,4.4之前还可以,android为了防止第三方软件拦截短信和乱写入短信记录,在4.4之后,设置了只有默认的短信应用才会有权限操作短信数据库。...,所以可以直接通过内容的解析者进行访问 // 拿到内容的解析者,直接通过上下文获取 public void click(View view) { switch (view.getId
原理是:通过算法扣掉(同化)了 图片中的一些某个点附近相近的像素,达到降低质量 减少 文件大小的目的。 应用场景:图片的上传。 3.什么是尺寸压缩?...图片的尺寸压缩是指:按照一定的倍数对图片减少单位尺寸的像素值,可以改变图片在内存中的大小,不改变图片在磁盘中的大小。 原理是:通过减少单位尺寸的像素值,真正意义上的降低像素值。...image.png 由于我们这里只讲图片的压缩,关于再次之前如何获取图片返回的URI和高低版本适配7.0等问题,我们这里不说,我之前写过文章,Android-图片的选择,裁剪,压缩,适配高版本,这里就不说了...补充 质量压缩无法避免oom,但可以改变图片在磁盘中或者说是File文件的大小,尺寸压缩可以避免OOM,但不改变图片本身的大小,只改变加载是在内存中的大小,即bitmap....主要就说完了,我们在实际运用中可以把这两个方法作为工具类,随时调用。
2URL URL(统一资源标识符)代表要操作的数据,可以用来标识每个ContentProvider,这样你就可以通过指定的URI找到想要的ContentProvider,从中获取或修改数据。.../user/7") long personid = ContentUris.parseId(uri); //获取的结果为:7 UriMatcher UriMatcher本质上是一个文本过滤器,用在contentProvider...4ContentResolver ContentResolver通过URI来查询ContentProvider中提供的数据。除了URI以 外,还必须知道需要获取的数据段的名称,以及此数据段的数据类型。...user表中所有记录 Cursor cursor = resolver.query(uri, null, null, null, "userid desc"); while(cursor.moveToNext...发生数据变化时调用 getContentResolver().notifyChange(uri, null)来通知注册在此URI上的访问者。
零、前言 本篇将涉及: 1.调用系统相机、上传到服务器操作 2.大照片通过采样并压缩尺寸避免OOM 3.media中图片的内容提供者使用方法,增删改查,获取手机所有图片路径 4.显示最近100...private void readImg() { try { //1.获取内容提供者,通过刚才的Uri打开输入流 Uri imgUri = Uri.parse...,通过刚才的Uri打开输入流 Uri imgUri = Uri.parse("content://media/external/images/media/1064830"); getContentResolver...void queryImg() { //1.查询获得游标 Cursor cursor = getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI...().delete(imgUri, "_id=1064830", null); L.d(delete + L.l());//1 表示删除了1行 } 6.获取所有图片的路径 一共12540张图片
短信 开始切入正题,先说短信,要从数据库中获取数据,就要了解其结构 短信数据库在data-->data中的下面路径 ?...Java代码为 //获取内容提供者 ContentResolver contentResolver = getContentResolver(); //获取短信表的路径...,其表结构也比较复杂,我们获取联系人的姓名、电话号码、邮箱,要通过3张表去提取 数据库所在位置data-->data中的下面路径 ?...data表,这个表中的“data1”列几乎包含了我们想要的数据,但是如何通过分类提取,第四列的代号说明了data1数据的类型,这些代号在mimetypes表中有对应的说明,要找到这些数据,又要通过raw_contact_id...来获取_ID和DISPLAY_NAME * _ID 该联系人的索引 * 通过这个ID可以在ContactsContract.CommonDataKinds.Phone.CONTENT_URI