Navicat for Premium 9.0.2激活(【Android】21.0 权限处理(三)——访问其他程序数据:提供数据给别的程序使用…)

Navicat for Premium 9.0.2激活(【Android】21.0 权限处理(三)——访问其他程序数据:提供数据给别的程序使用…)

1.0 事实上这章特别难写,知识点比较清楚,比较少。但是代码量特别多,主要还是因为重复性的代码比较多,而且在细节方面,会用了某个方法,不解释又完全不知道这个方法干什么了这么屌。但是要相信自己,只要沉下心去阅读,会很快掌握的。

特别吐槽一句,挺讨厌的,把界面搞得跟特么广告网站似的。看的不烦吗?

2.0 本篇需要结合我的上一篇的内容:

链接:【Android】20.0 权限处理(二)——访问其他程序数据:读取联系人信息

主要写的是应用程序如何从另外一个应用程序中读取数据。

而这章的内容是相反的:如何给别的应用程序提供权限,以访问自己的数据。

本章内容可参考下面两篇相关文章:
链接:Android:关于ContentProvider的知识都在这里了!
链接:Android跨进程通信:图文详解 Binder机制 原理

3.0 话不多说,知识点放最后,先把项目贴上来。

这里涉及两个应用程序:

  • 一个是之前已经写好的项目,DatabaseTest(所以该项目里面可能有与本篇内容无关的代码),主要作用是可以创建一个SQLite数据库,保存在该软件包名目录文件下。

  • 另一个是新开的项目,ProviderTest,主要是用于操作DatabaseTest应用程序中的数据,可以进行增删查改。
    两个项目的目录如下:

    16102290-cd691748a96fc6f3.png

    2019-02-20_.png

    16102290-32fcfdbf129741c4.png

    2019-02-20_.png

4.0 先看下DatabaseTest项目运行后的画面:
16102290-8207fa17b19a2506.png

2019-02-20_.png
5.0本篇内容只需要这个应用程序在模拟器上装载即可,不要去“创建数据库”按钮,测试运行的时候,可以把Android studio中DatabaseTest项目关闭(稍后还需要向DatabaseTest项目中添加代码)。
6.0 ContentProvider,内容提供器,Android 四大组件之一

(Activity、Service、Broadcast Receiver、Content Provider)

关于什么是Android四大组件:
链接:android四大组件(组成)是什么,功能分别是

想要实现跨程序共享数据功能,官方推荐的方式就是这个——使用内容提供器。

一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProvider是以类似数据库中表的方式将数据暴露的。那么外界获取其提供的数据,也就应该与从数据库中获取数据的操作基本一样,只不过是采用URL来表示外界需要访问的“数据库”。

ContentProvider类有6个抽象方法,在使用子类继承它的时候,需要将这6个方法全部重写。比如新建一个MyProvider 继承自ContentProvider ,代码示范如下(本代码和上面所述的两个项目无关,但可以便于我们实际理解):


这里需要特别说明下的是方法。

一个标准的内容URI的写法是这样的:

知道什么是内容URI的程序员看一眼就知道,我们期望访问的是com.example.app这个应用的table1表中的数据,或者格式如下:
表示我们期望访问的是com.example.app这个应用的table1表中id为1的数据

划线的重点来了:
1.内容URI主要有以上两种格式:

  • 以路径结尾,表示期望访问该表中所有数据。
  • 以id结尾,表示期望访问该表中拥有相应id的数据。

2.可以转成使用通配符来表示,通配符规则如下:
:表示匹配任意长度的任意字符。
:表示匹配任意长度的数字。

因此,内容URI分别可以改写成:

3.一个内容URI所对应的MIME字符串主要由3部分组成:

  • 必须以vnd开头
  • 如果内容URI以路径结尾,则后接,如果内容URI以id结尾,则后接
  • 最后接上

4.所以对于内容URI所对应的MIME类型格式为:

对于内容URI所对应的MIME类型格式为:

5.MIME数据类型
作用:指定某个扩展名的文件用某种应用程序来打开
如指定文件采用应用程序打开、指定文件采用应用程序打开
(当然,这里其实用不到这个知识点,因为只有上面所述的两种写法)

OK,理论到位,接着往下走。

7.0 这时候我们可以摆弄DatabaseTest项目中的代码了。它需要做到公开自己的数据。

首先,activity_main.xml这个布局文件,不需要起作用(虽然里面有一个Button控件,所以这里就不贴代码了)
然后,MainActivity.java也不需要增加什么代码(虽然里面有个数据库创建的程序响应):


8.0 MyDatabaseHelper类主要是数据库的创建:

类继承了类,这是一个抽象类,这个抽象类需要重写方法,在这两个方法里面,我们可以实现创建、升级SQLite数据库。

9.0 在目录包名上右击,New→Other→Content Provider:
16102290-bfe2af2a79481806.png

2019-02-20_.png

会弹出如下窗口:

16102290-be235afee276c967.png

2019-02-20_.png

我们将内容提供器命名为:
,authority指定为
,
属性表示是否允许外部程序访问我们的内容提供器,
表示是否启用这个内容提供器,都勾上,finish创建:

接着修改DatabaseProvider中的代码:


代码说明都在代码块中。

10.0 最后,内容提供器一定要在中注册,但是由于我们是使用软件的快捷方式创建的,注册这一步已经自动完成了:

标签内就是,其中:

  • 属性指定了DatabaseProvider的类名
  • 属性指定了DatabaseProvider的authority
  • 属性和属性上面已经说了,根据我们创建时打钩的状态自动生成的,表示DatabaseProvider允许被其他应用程序进行访问。
11.0 DatabaseTest项目代码全部编写完毕。

一开始也说了,本篇内容只需要DatabaseTest这个应用程序在模拟器上装载即可,不要去“创建数据库”按钮,运行DatabaseTest项目后,可以把Android studio中DatabaseTest项目关闭了。

12.0 新建项目,ProviderTest。

先看布局文件


效果很简单:

16102290-8746aa24094db270.png

2019-02-20_.png
MainActivity.java:

13.0 运行:
16102290-f33655df3ec15cee.png

2019-02-20_.png

“添加数据到BOOK”按钮

16102290-3bd9efade3da0545.png

2019-02-20_20341.png

将数据库导出,在Navicat Premium中查看:

16102290-a08d2ab3183c836e.png

2019-02-20_.png

关于如何导出数据库文件并查看请参考:
链接:【Android】18.0 SQLite数据库——LitePal的使用及SQLite数据库怎么查看

“从BOOK中查询数据”按钮:

16102290-fdd646b817387a96.png

2019-02-20_.png

“更新数据到BOOK”按钮,然后再次导出数据库,查看数据库:

16102290-eeffed7ea8584413.png

2019-02-20_.png

“从BOOK中删除数据”按钮,再“从BOOK中查询数据”按钮,没有Toast提示响应。再次导出数据库,查看数据库:

16102290-56826f851bb28558.png

2019-02-20_.png

就这么些意思。

备注:更全面的理解可以参考本篇一开始提供的参考链接,本篇有助于那些需要实现类似功能的朋友,可以直接照猫画虎,先让自己的构思实现起来。

再备注:说实话,自己挺反感写太多理论东西,当它们扎堆的时候,完全不知道怎么用好伐。
把东西放在实际项目中,傻瓜式地先串起来run成功后,写两遍知识点就学得差不多了,再回头看看理论,简直不要太好懂……

再再备注:除了一开始写的两三篇文章版本控制比较乱之外,自己写的代码可以说:

  • 1.都是用的版本
  • 2.目标版本是,但模拟器跑的版本是
  • 3.电脑系统

再再再备注:Navicat for Premium 9.0.2激活真的很讨厌……

END

今天的文章
Navicat for Premium 9.0.2激活(【Android】21.0 权限处理(三)——访问其他程序数据:提供数据给别的程序使用…)分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/121837.html

(0)
编程小号编程小号
上一篇 2024-07-06 17:46
下一篇 2024-07-06 18:11

相关推荐