一 Android基本知识—— 四大组件( 二 )



动态注册
在代码中注册称为动态注册 。注册广播接收器后才可以接收广播,注册的 或者 销毁了就接收不到广播了 。
BroadcastReceiver receiver = new BroadcastReceiver();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("android.intent.action.Test");context.registerReceiver(receiver, intentFilter);
类型 无序广播
完全异步,逻辑上可以被任何广播接收者接收到 。
优点是效率较高 。缺点是一个接收者不能将处理结果传递给下一个接收者,并无法终止广播 。
有序广播
按照被接收者的优先级顺序,在被接收者中依次传播 。也可以对广播数据进行修改传递 。
ps:通过 .(, ,, , , , )指定广播接收者,这个接收者是最终接收者 。通常比他优先级更高的接收者如果没有终止广播,那么他的会被执行两次,第一次是正常的按照优先级顺序执行,第二次是作为最终接收者接收 。如果比他优先级高的接收者终止了广播,那么他依然能接收到广播 。
异常
【一Android基本知识—— 四大组件】在8.0以上系统注册静态广播后发现接收不到广播,()得不到执行 。
原因:.0对静态广播做了限制,在开发文档中有如下内容:
Note: If your appAPI level 26 or , youuse thetoafor( that do notyour app ),for a fewthat arefrom that .
如果您的应用程序针对26级或更高级别的API,则无法使用清单声明隐式广播的接收者(不针对本地广播),除了几个免除该限制的隐式广播 。
: 应用程序之间共享数据的接口 。为应用间的数据交互提供了一个简易,安全的方式,允许把自己的应用数据根据需求开放给 其他应用进行增删改查,而不用担心因为直接开放数据库权限而带来的安全问题 。
实现
是一个抽象类,如果需要自定义提供内容,继承类,然后覆写 query、、、 等方法 。因为其是四大组件之一,因此必须在文件中进行注册 。把自己的数据通过 uri 的形式共享出去( 系统下 不同程序 数据默认是不能共享访问) 。
publicclass PersonContentProvider extends ContentProvider{public boolean onCreate(){}Cursor query(Uri, String[], String, String[], String)void insert(Uri, ContentValues)void update(Uri, ContentValues, String, String[])void delete(Uri, String, String[])}

// 获取短信内容public void onquerySms(View view) {ContentResolver contentResolver = getContentResolver();Cursor cursor = contentResolver.query(Uri.parse("content://sms"), new String[]{"body", "address", "type", "date"}, null, null, null);if (cursor == null){return;}while (cursor.moveToNext()) {String body = cursor.getString(cursor.getColumnIndex("body"));String address = cursor.getString(cursor.getColumnIndex("address"));String type = cursor.getString(cursor.getColumnIndex("type"));String date = cursor.getString(cursor.getColumnIndex("date"));Log.i(TAG, "短信body:" + body + " address:" + address + " type:" + type + " date:" + date);}cursor.close();}
对比Sql
Sql 也有增删改查的方法,但是 sql 只能查询本应用下的数据库 。而
还可以去增删改查本地文件. xml 文件的读取等 。
、、之间的关系
:内容提供者,用于对外提供数据 。
:内容解析者,用于操作内容提供者提供的数据
内容监听器,可以监听数据的改变状态