首页 > 其他分享 >Android开发 内容提供者ContentProvider

Android开发 内容提供者ContentProvider

时间:2022-11-22 16:36:48浏览次数:56  
标签:CODE String 提供者 Uri uri ENABLE Android ContentProvider public

前言

  ContentProvider内容提供者属于Android四大组件之一,是用来让App将一些共享数据提供给外部操作的组件。一般情况下是配合数据库使用,将数据库内容外露给外部进行增删查改使用,但是也可以改造成简单的外部控制服务.虽然说不太正规,但是总比AIDL的使用会简单容易多了。

  本人ContentProvider使用场景不多,所以也是简单记录一下。

 

简单的使用,提供给外部控制某些功能

创建内容提供者

这是一个按键功能启用与禁用的内容提供者服务,主要是提供给外部操作按键可用状态

 

public class KeyContentProvider extends ContentProvider {
    private static String BASE_URL = "com.zh.dev.KeyContentProvider";
    /**
     * 启用按键功能
     */
    private static final String ENABLE_REMOTE_CONTROL_FUNCTION = "enable";
    /**
     * 禁用按键功能
     */
    private static final String DISABLE_REMOTE_CONTROL_FUNCTION = "disable";
    private static final int ENABLE_CODE = 1;
    private static final int DISABLE_CODE = 0;
    /**
     * 用来屏蔽遥控器按键功能的布尔值
     */
    public static boolean sIsEnableRemoteControlFunction = true;
    private static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

    static {
     //注意!请记得在这里的匹配器里添加URL 
        //这里的ENABLE_CODE,可以理解成是将BASE_URL 与 ENABLE_REMOTE_CONTROL_FUNCTION 组合后用于识别的code,并不是在路径后面增加什么数字
        uriMatcher.addURI(BASE_URL, ENABLE_REMOTE_CONTROL_FUNCTION, ENABLE_CODE);
        uriMatcher.addURI(BASE_URL, DISABLE_REMOTE_CONTROL_FUNCTION, DISABLE_CODE);
    }

    public LwlxKeyContentProvider() {
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }

    @Override
    public String getType(Uri uri) {
        return null;
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        Log.e("zh", "insert:收到信息");
        switch (uriMatcher.match(uri)){
            case ENABLE_CODE:
                Log.e("zh", "insert:收到信息启用");
                sIsEnableRemoteControlFunction = true;
                break;
            case DISABLE_CODE:
                Log.e("zh", "insert:收到信息禁用");
                sIsEnableRemoteControlFunction = false;
                break;
        }
        return null;
    }

    @Override
    public boolean onCreate() {
        return false;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
                        String[] selectionArgs, String sortOrder) {
        return null;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection,
                      String[] selectionArgs) {
        switch (uriMatcher.match(uri)){
            case ENABLE_CODE:
                sIsEnableRemoteControlFunction = true;
                break;
            case DISABLE_CODE:
                sIsEnableRemoteControlFunction = false;
                break;
        }
        return 0;

    }
}

 

在AndroidManifest.xml添加

    <application>
        <provider
            android:name=".KeyContentProvider"
            android:authorities="com.zh.dev.KeyContentProvider"
            android:enabled="true"
            android:exported="true"></provider>

     
    </application>

操作数据

在其他apk里调用如下代码操作。注意! content://  是固定格式

        //禁用部分按键功能,以帮助测试
        val uri: Uri = Uri.parse("content://com.zh.dev.KeyContentProvider/disable")
        contentResolver.insert(uri, ContentValues())


        //重新启用按键功能
        val uri: Uri = Uri.parse("content://com.zh.dev.KeyContentProvider/enable")
        contentResolver.insert(uri, ContentValues())

 

 

 

 

end

标签:CODE,String,提供者,Uri,uri,ENABLE,Android,ContentProvider,public
From: https://www.cnblogs.com/guanxinjing/p/16915504.html

相关文章

  • android开发Installed Build Tools revision 33.0.0 is corrupted. Remove and instal
    InstalledBuildToolsrevision33.0.0iscorrupted.RemoveandinstallagainusingtheSDKManager.在你的androidsdk安卓目录中找到buildtools目录中的d8.bat,......
  • 自动增加 Android App 的版本号
    一般的C#应用程序中都有一个AssemblyInfo.cs文件,其中的AssemblyVersionattribute就可以用来设置该应用程序的版本号。譬如,[assembly:AssemblyVersion("1.0.*")]......
  • 关于Android12安装apk出现-108异常INSTALL_PARSE_FAILED_MANIFEST_MALFORMED的解决方
    原文地址:关于Android12安装apk出现-108异常INSTALL_PARSE_FAILED_MANIFEST_MALFORMED的解决方法-Stars-One的杂货小窝问题描述用户的小米手机上出现以下界面问题小米......
  • Android设计模式系列(7)--SDK源码之命令模式
    命令模式,在.net,java平台的事件机制用的非常多,几乎每天都与之打交道。android中对我印象最深的就是多线程多进程的环境,所以必然大量使用到Runbable,Thread,其实用的就是最......
  • Android设计模式系列(1)--SDK源码之组合模式
    Android设计模式系列(1)–SDK源码之组合模式Android中对组合模式的应用,可谓是泛滥成粥,随处可见,那就是View和ViewGroup类的使用。在androidUI设计,几乎所有的widget和布局类......
  • Android中对Log日志文件的分析(解决ANR)
    一.概述ANR使我们日常开发中偶尔会遇到的一种情况,也就是应用程序无响应,其实在应用出现ANR的时候,系统会在控制台给出错误提示,并且会产生一个相关的日志文件,今天我们就来分析......
  • Android webview实战
    今天来使用webview进行一个实例演练,可以基本用到任何地方,目的在于熟悉一下webview的使用,基本算是入门的吧。先看一下效果图,接下来我们看看如何实现第一步:首先加载网页......
  • 从setContentView分析Android加载布局的流程
    一.概述在Activity中,我们基本都会用到setContentView方法,这个方法是干啥的想必大家都知道,把我们写好的布局文件显示到界面上。今天我们就去看看底层的源码,分析一下到底是如......
  • 从源码的角度理解Android消息处理机制
    总结与Handler共同作用的有Looper,MessageQueue,Message。我么接下来从源码的角度看看整个过程的大概实现。首先说一下每个对象的作用:Looper:消息轮询循器,不断的从消息队......
  • Android命令行查看内存情况
    在学习如何查看内存前先来介绍几个概念VSS-VirtualSetSize虚拟耗用内存(包含共享库占用的内存)RSS-ResidentSetSize实际使用物理内存(包含共享库占用的内存)PSS......