대부분의/ContactsContract.Intents.Insert
에서 모든 값이 기본 연락처 응용 프로그램에서 model/EntityModifier.java
클래스에서 처리됩니다 - 그리고 그건 그냥 StructuredName.GIVEN_NAME
에 Insert.NAME
의 값을 거즈.
모든 이름 구성 요소를 지원하지만 vCard 파일을 sdcard에 덤프하거나 ContentResolver#openInputStream(Uri)
읽을 수있는 파일 (일반적으로 파일)을 제공해야하는 vCard 2.1 (text/x-vcard)로 가져 오기를 시도해 볼 수 있습니다. sdcard 또는 자신의 ContentProvider를 가리키는 URI).
동적으로 vCard를 생성하기 위해 컨텐트 프로를 사용하는 간단한 예 :
당신의 활동에 :
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse("content://some.authority/N:Jones;Bob\nTEL:123456790\n"), "text/x-vcard");
startActivity(i);
귀하의 컨텐트 프로에서 (ACTION_VIEW 인 텐트에 사용 권한 등록) :
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
try {
FileOutputStream fos = getContext().openFileOutput("filename.txt", Context.MODE_PRIVATE);
String vcard = "BEGIN:VCARD\nVERSION:2.1\n" +
uri.getPath().substring(1) +
"END:VCARD\n";
fos.write(vcard.getBytes("UTF-8"));
fos.close();
return ParcelFileDescriptor.open(new File(getContext().getFilesDir(), "filename.txt"), ParcelFileDescriptor.MODE_READ_ONLY);
} catch (IOException e) {
throw new FileNotFoundException();
}
}
이것은 트리거 될 때 Uri의 경로에 넣은 이름의 연락처를 전화 번호부에 삽입해야합니다. 사용자에게 여러 개의 연락처 계정이있는 경우 하나를 선택하라는 메시지가 표시됩니다.
참고 : vCard의 적절한 인코딩은 물론 완전히 무시됩니다. 나는 대부분의 버전의 연락처 앱 을 이미지화해야합니다.은 vCard 3.0을 지원하며 vCard 2.1과 같이 뇌사가없는 인코딩을 제공하지 않습니다.
위쪽에서이 방법을 사용하면 직장/휴대 전화 및 기타 번호를 추가 할 수 있습니다.
오 스냅. 저주받은 일을 편집하고 싶다는 사실을 눈치 챘을 것입니다. 대부분의 경우 연락처를 추가하고 계정 이름과 유형을 정의하면 사용자에게 확인을 요구하지 않습니다. – Jens
답변 해 주신 Jens에게 감사드립니다. 참으로 재미있는 (해커 임에도 불구하고) 접근법입니다. ACTION_INSERT_OR_EDIT를 사용하여 vcard (추상화의 일부 레이어에서)를 의도에 전달할 수있는 방법이 있습니까? – Dino
잘 모르겠습니다. ACTION_INSERT_OR_EDIT 의도는 기본 연락처 앱에서 지원하는 항목에서 매우 제한적입니다. – Jens