前言
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