내 애플리케이션에서 android에 연락처를 추가하려고합니다. 이를 위해 모든 데이터를 가져 와서 의도를 통해 전달합니다.ACTION_EDIT로 활동 시작하고 LOOKUP_KEY를 전달하면 NumberFormatException이 발생합니다.
그리고, 삽입하려고 할 때 연락처 추가 화면이 열리므로 사용자가 편집 할 수 있으므로 ACTION_EDIT를 사용하려고합니다.
public void addNewContactToDevice()
{
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
int rawContactInsertIndex = ops.size();
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, null)
.withValue(RawContacts.ACCOUNT_NAME, null)
.build());
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.GIVEN_NAME, person.getName())
.withValue(StructuredName.FAMILY_NAME, person.getLastName())
.build());
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
.withValue(Phone.NUMBER, person.getPhone())
.withValue(Phone.TYPE, Phone.TYPE_MOBILE)
.build());
try
{
((Panel)activity).getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
Cursor contactsCursor = activity.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[] {ContactsContract.Contacts.LOOKUP_KEY, ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID},
ContactsContract.CommonDataKinds.Phone.NUMBER + " = ?" ,
new String[] { PhoneNumberUtils.formatNumber(individualSelected.getPhone()) }, null);
contactsCursor.moveToFirst();
String androidContactId = contactsCursor.getString(contactsCursor.getColumnIndex(LOOKUP_KEY));
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setData(Uri.parse(ContactsContract.Contacts.CONTENT_LOOKUP_URI + "/" + androidContactId));
((Panel)activity).startActivityForResult(intent, 2);
}
catch (RemoteException e)
{
e.printStackTrace();
}
catch (OperationApplicationException e)
{
e.printStackTrace();
}
}
는 그러나 문제는 ACTION_EDIT를 통과하면 LOOKUP_KEY에 대한 NumberFormatException이 (즉,이 0r17-3E483A46442C32324838 같은 것입니다) 반환한다는 것입니다. 연락처 추가 화면을 열려고하면 LOOKUP_KEY를 구문 분석 할 수 없습니다.
내가 어떻게해야합니까?
감사합니다.
업데이트 :
intent.setData(Uri.parse(ContactsContract.Contacts.CONTENT_LOOKUP_URI + "/" + androidContactId));
I이 전달되어야한다 : 여기서 I 대신 사항 setData 방식이를 전달, 이에 대한 해결책을 찾은 로그 캣
10-18 08:54:59.003: ERROR/AndroidRuntime(7527): Caused by: java.lang.NumberFormatException: 0r17-3E483A46442C32324838
10-18 08:54:59.003: ERROR/AndroidRuntime(7527): at java.lang.Long.parse(Long.java:364)
10-18 08:54:59.003: ERROR/AndroidRuntime(7527): at java.lang.Long.parseLong(Long.java:354)
10-18 08:54:59.003: ERROR/AndroidRuntime(7527): at java.lang.Long.parseLong(Long.java:320)
10-18 08:54:59.003: ERROR/AndroidRuntime(7527): at android.content.ContentUris.parseId(ContentUris.java:41)
10-18 08:54:59.003: ERROR/AndroidRuntime(7527): at com.android.contacts.ui.EditContactActivity$QueryEntitiesTask.doInBackground(EditContactActivity.java:497)
10-18 08:54:59.003: ERROR/AndroidRuntime(7527): at com.android.contacts.ui.EditContactActivity$QueryEntitiesTask.doInBackground(EditContactActivity.java:471)
10-18 08:54:59.003: ERROR/AndroidRuntime(7527): at com.android.contacts.util.WeakAsyncTask.doInBackground(WeakAsyncTask.java:45)
10-18 08:54:59.003: ERROR/AndroidRuntime(7527): at android.os.AsyncTask$2.call(AsyncTask.java:185)
10-18 08:54:59.003: ERROR/AndroidRuntime(7527): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
죄송합니다. 나는 코드를 놓쳤다. 올바른 동작은 ACTION_EDIT입니다. – rogcg
이 간단한 인 텐트를 시도하십시오 i = new 인 텐트 (Intent.ACTION_INSERT_OR_EDIT); i.setType (ContactsContract.Contacts.CONTENT_ITEM_TYPE); i.putExtra (Insert.NAME, "TESTTEST"); i.putExtra (Insert.PHONE, "209384"); startActivity (i); 이 작업이 끝나면 intent.setData()에서 연락처 URI.paarse() 메소드를 확인하십시오. – user370305
나는 그것을 전에 그렇게했다. 나는 다른 방법으로 바꾸기 때문에 화면의 두 번째 필드에 성을 삽입하고 마지막 옵션은 제공하지 않습니다. – rogcg