您的位置:首页 > 移动开发 > Android开发

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();
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐