Android 跨程序共享数据之访问其他应用数据(访问联系人)
2019-08-14 11:00
453 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014714188/article/details/99547071
Android 跨程序共享数据之访问其他应用数据(访问联系人)
跨程序访问其他程序数据很简单,总的来说就是三步:一、动态申请运行时权限,二、按照其格式拼接对应URI获取数据,三、获取到数据后自己显示。本文以获取手机联系人的例子来实现。
首先来看看最后实现效果
由于这里只是做最简单的显示,只是用了最原始的listview。真机调试的,模拟器怎么都无法添加联系人
动态申请获取联系人的权限
代码中Manifest.permission.READ_CONTACTS为读取手机联系人权限,PackageManager.PERMISSION_GRANTED是看用户是否同意了获取该权限,readContacts()是获取联系人的具体方法实现。
//运行时权限申请 if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_CONTACTS)!= PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.READ_CONTACTS},1); }else { readContacts(); } /** * 权限监控 * @param requestCode * @param permissions * @param grantResults */ @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(MainActivity.this,"你拒绝开启该权限!",Toast.LENGTH_SHORT).show(); } } }
获取联系人的具体实现
代码中getContentResolver().query()总共有五个参数,
而本文中,ContactsContract.CommonDataKinds.Phone.CONTENT_URI就是别人为我们已经封装好的Uri,其余参数传null。
/** * 读取联系人 */ 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 contactsName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); //获取联系人电话 String contactsNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); contactsList.add(contactsName+"\n"+contactsNumber); } arrayAdapter.notifyDataSetChanged(); } }catch (Exception e){ e.printStackTrace(); }finally { if (cursor!=null){ cursor.close(); } } }
最后不要忘记在AndroidManifest.xml文件中去声明权限
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
到这里获取手机联系人的工作就完成了,最后我们来看看整体代码
public class MainActivity extends AppCompatActivity { private ArrayAdapter arrayAdapter; private ListView listView; private List<String> contactsList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = findViewById(R.id.contacts_listView); arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,contactsList); listView.setAdapter(arrayAdapter); //运行时权限申请 if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_CONTACTS)!= PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.READ_CONTACTS},1); }else { readContacts(); } } /** * 读取联系人 */ 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 contactsName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); //获取联系人电话 String contactsNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); contactsList.add(contactsName+"\n"+contactsNumber); } arrayAdapter.notifyDataSetChanged(); } }catch (Exception e){ e.printStackTrace(); }finally { if (cursor!=null){ cursor.close(); } } } /** * 权限监控 * @param requestCode * @param permissions * @param grantResults */ @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(MainActivity.this,"你拒绝开启该权限!",Toast.LENGTH_SHORT).show(); } } } }
相关文章推荐
- Android之 内容提供器(1)——使用内容提供器访问其它程序共享的数据
- android 应用间共享数据,调用其他app数据资源
- android开发(26) 和其他应用交换数据方式一,使用intent指定自定义action调用其他程序里的activity,并获得其返回的结果
- android开发(26) 和其他应用交换数据方式一,使用intent指定自定义action调用其他程序里的activity,并获得其返回的结果
- Android应用的私有数据被其他应用访问
- android学习:使用它ContentProvider获取其他程序共享的数据
- android开发(26) 和其他应用交换数据方式一,使用intent指定自定义action调用其他程序里的activity,并获得其返回的结果
- android开发(26) 和其他应用交换数据方式一,使用intent指定自定义action调用其他程序里的activity,并获得其返回的结果
- Android应用开发之(数据共享) -actionbar
- 再探Android多应用间数据共享机制,自定义ContentProvider
- 使用ContentProvider访问其他应用的SharedPreferences数据
- Android深入探究笔记之十 -- 使用 ContentProvider 共享数据(二),访问与添加通讯录
- 如何查看Android里面其他应用的数据
- android 利用SharedPreferences 在不同应用之间共享数据
- Android开发—数据库应用—访问数据表(SQLite OpenHelper) —添加查询
- Android应用访问手机联系人、通讯录
- 无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)
- android 程序外启动其他应用
- Android 中的应用组件之----Content Provider (跨进程私有数据共享)
- Android之用sharedUserId来实现不同应用(APK)数据共享