【Android】BoradcastReceiver ContentProvider

BoradcastReceiver

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



        
            
        

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

Content Provider

用于共享资源
【Android】BoradcastReceiver ContentProvider_第1张图片

查询通讯录

//参数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://
需要声明


    


    
    
    

【Android】BoradcastReceiver ContentProvider_第2张图片

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);
下面的将只允许以下前缀的拥有权限

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

你可能感兴趣的:(android)