赞
踩
@author 无忧少年
@createTime 2021/08/15
内容提供器(Content Provider)主要用于再不同的应用程序之间实现数据共享的功能,他提供了一台完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问的数据的安全性。目前,使用内容提供器是Android实现跨程序共享数据的标准方式。
不同于文件存储和SharedPreferences存储中的两种全局可读写的操作模式,内容提供器可以选择对哪一部分数据进行共享,也就是对权限进行控制,从而保证我们应用程序中的隐私数据不会有泄露的风险。
再介绍内容提供器之前,需要先了解一下Android运行时权限,因为一会的内容提供器会使用到运行时权限,当然不止内容提供器会使用,当我们进行开发工作的时候会经常和权限打交道。
Android的权限机制并不是什么新鲜事物,从系统的第一个版本开始就已经存在了。但其实之前Android的权限机制再保护用户安全和隐私等方面渠道的作用比较有限,尤其是一些大家都离不开的常用软件,非常容易“店大欺客”。为此,Adnroid开发团队再Android 6.0系统中inrush了运行时权限这个功能,从而更好的保护了用户的安全和隐私。
在之前的广播机制(Roadcast)中有申请过系统的网络状态的权限,保证能监听到网络变化的广播,需要再AndroidManifest.xml中加入以下声明
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcasttest">
...
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
...
</manifest>
因为访问系统的网络状态涉及了用户设备的安全险,因此必须要在AndroidManifest.xml加入权限声明,否则程序就会因无权限崩溃。
权限主要分为两大类:普通权限和危险权限,再之前广播机制(Roadcast)中有申请过系统的网络状态的权限就是一种普通权限,这种权限值得是那些不会直接威胁到用户的安全和隐私的权限,对于这部分权限的申请,系统会自动帮我们进行授权,而不需要用户再去手动操作了。危险权限则是表示那些可能会触及用户隐私或者对设备安全性造成影响的权限,如获取设备联系人信息、定位设备的地理位置等,对于这部分权限申请,必须要由用户手动点击授权才可以,否则程序就无法使用相应的功能。
具体所有的权限可以看官方文档https://developer.android.google.cn/reference/android/Manifest.permission
首先先新建一个RuntimePermissonTest的项目,就再这个项目上来学习运行时权限相关的使用方法。主要就使用CALL_PHONE这个权限,需要再页面加个按钮,然后加上监听,点击按钮就拨打10010电话,同时也需要在AndroidManifest.xml加入权限声明,代码如下:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/make_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Make Call">
</Button>
</LinearLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.runtimepermissontest"> <permission android:name="android.permission.CALL_PHONE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Androidtest"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。