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
本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/16915504.html
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。