Android 跨程序共享数据之访问其他应用数据(访问联系人)

Android 跨程序共享数据之访问其他应用数据(访问联系人)

跨程序访问其他程序数据很简单,总的来说就是三步:一、动态申请运行时权限,二、按照其格式拼接对应URI获取数据,三、获取到数据后自己显示。本文以获取手机联系人的例子来实现。

首先来看看最后实现效果

由于这里只是做最简单的显示,只是用了最原始的listview。真机调试的,模拟器怎么都无法添加联系人
《Android 跨程序共享数据之访问其他应用数据(访问联系人)》

动态申请获取联系人的权限

代码中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()总共有五个参数,
《Android 跨程序共享数据之访问其他应用数据(访问联系人)》
而本文中,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();
                }
        }
    }

}
    原文作者:笑忘书客
    原文地址: https://blog.csdn.net/u014714188/article/details/99547071
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞