Content Provider使用方法以及Android运行时权限申请
16lz
2021-01-26
本文通过一个获取所有联系人实例来展示如何获取其他应用数据以及运行时权限申请过程。
- AndroidManifest.xml加入如下权限
- 声明一个listView存放取到的联系人信息;检测是否有对应权限,如果没有则请求对应权限,权限授予后会有相应的回调方法。
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView contractsView = findViewById(R.id.contacts_view); adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, contactsList); contactsView.setAdapter(adapter); if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, 1); } else { readContacts(); } }
- 权限授予后的回调方法。
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 1: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { readContacts(); } else { Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show(); } break; default: } }
- 读取联系人,使用ContentResolver的query()方法,传入uri以及其他过滤参数,返回值为Cursor对象。遍历Cursor并放入listview中。
private void readContacts() { Cursor cursor = null; try { cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); if (cursor != null) { while (cursor.moveToNext()) { String displatName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); contactsList.add(displatName + "\n" + number); } adapter.notifyDataSetChanged(); } } catch (Exception e) { e.printStackTrace(); } finally { if (cursor != null) { cursor.close(); } } }
更多相关文章
- Android(安卓)腾讯面试Glide源码解析 3分钟手写最牛框架 看完成
- Android(安卓)TextView实现点击展开动画效果
- Handler, Looper, MessageQueue, Message源码详细分析
- Android(安卓)多进程编程 15问15答!
- setContentView( )方法
- Android开发之异步详解(二)之AsyncTask
- Android(安卓)APP tcpdump抓包方法
- NDK DEBUG方法
- Android(安卓)操作蓝牙Ble时数据转换的常用方法