我的应用程序“调用”设备的应用程序,允许用户插入新的联系人。 联系人保存在设备上后,我想“查询”该联系人的Uri。
我的代码适用于模拟器(Android 4,5,6,7)但不适用于我的华为P8,我无法理解为什么。
首先,我在活动和Manifest.xml
中请求权限:
ActivityCompat.requestPermissions(this, new String [] {Manifest.permission.WRITE_CONTACTS,
Manifest.permission.READ_CONTACTS},
101);
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
这是我的应用的代码
1)我“呼叫”设备管理联系人的应用程序
Intent intent = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
intent.putExtra("finishActivityOnSaveCompleted", true);
startActivityForResult(intent, ADD_FRIEND_CODE);
2)保存新联系人后,我的应用程序返回到前台并调用onActivityResult()
方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case ADD_FRIEND_CODE:
if(resultCode == RESULT_OK){
/*I get the URI of the contact. This works both
on emulator and real device*/
Uri lastContactUri = data.getData();
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(lastContactUri, null, null, null, null);
/*On emulator the cursor is full, on real device is empty*/
if (cursor.moveToFirst()) {
cursor.moveToPrevious();
while (cursor.moveToNext()) {
String name = "";
if (cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME) > -1) {
name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
}
Toast.makeText(this, name , Toast.LENGTH_SHORT).show();
}
}
cursor.close();
break;
}
}
有没有人理解为什么我的代码可以在许多模拟器上运行,而不是在我的真实设备上运行。