1

BoradcastReceiver

通过Action标识,可以自定义Action定义自己的广播
动态注册
addAction("android.net.conn.CONNECTIVITY_CHANGE"); //网络变化
静态注册

<!-- 开机广播 -->
<receiver android:name=".TestBroadCast" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
</receiver>

sendOrderedBroadcast 有序广播 abortBroadcast()可以截断
sendBroadcast 标准广播
sendStickyBroadcast 粘性广播 Android P中废弃,有安全性问题
LocalBroadcastManager 实现本地广播

Content Provider

用于共享资源
content.jpg
image.png

查询通讯录

//参数1:唯一标识的URI,这里直接用Contacts.CONTENT\_URI  
//参数2:你需要查询的字段,这里就只查询联系人id和姓名:  
//参数3:查询的条件  
//参数4:查询的多个条件  
//参数5:查询的结果排序  
//查询结果是一个Cursor(游标)对象,也就是结果集,对其进行遍历; 
ContentResolver resolver = getContentResolver();
Cursor c = resolver.query(ContactsContract.Contacts.CONTENT_URI,  new String[] {ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME},  null, null, null);
while (c.moveToNext()) {  
    int id = c.getInt(c.getColumnIndex(ContactsContract.Contacts.\_ID));
    Cursor c1 = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT\_URI, new String\[\] {ContactsContract.CommonDataKinds.Phone.NUMBER}, ContactsContract.CommonDataKinds.Phone.CONTACT\_ID \+ "=" \+ id, null, null);  
    while (c1.moveToNext()) {  
        String number = c1.getString(c1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));  
    }
}

FileProvider 是ContentProvider的子类
7.0以后file://Uri不能使用,可以使用content://
需要声明

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="set_your_package_name"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/filepath_data" />
</provider>
<?xml version="1.0" encoding="utf-8"?>
<paths>
    <files-path name="my_files" path="tempfiles" />
    <external-path name="my_external" path="Download"/>
    <cache-path name="my_cache" />
</paths>

image.png

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    Uri uri = FileProvider.getUriForFile(CameraActivity.this, "app的包名.fileProvider", photoFile);
} else {
    Uri uri = Uri.fromFile(photoFile);
}

需要授予这个uri临时权限
android:grantUriPermissions
intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
下面的将只允许以下前缀的拥有权限
<grant-uri-permission android:pathPrefix="/hello" />

————————————————
版权声明:本文为CSDN博主「爱博客大伯」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013553...


程浩
21 声望2 粉丝