2017-03-20 14 views
2

연락처 이미지를 서버에 업로드해야하지만 실제 경로를 가져올 수 없습니다. 제발 도와주세요.Android 연락처 사진의 이미지 경로를 얻는 방법은 무엇입니까?

나는 아래 uri지고있다.

URI : 내용 : //com.android.contacts/display_photo/2,

+0

해당 이미지를 업로드하려면 uri를 사용하십시오. Yoh는 심지어 존재한다면 실제 파일 경로가 필요하지 않습니다. – greenapps

+0

@greenapps 메신저를 사용하여 이미지를 서버로 보내려 할 때 파일을 찾을 수 없습니다. 예외. – Sach

+0

그리고? 어떤 진술이 그것을 일으키는 것입니까? 멀티 파트로 아무 것도 할 필요가 없습니다. 그러나 파일 경로 인 것처럼 해당 내용 체계를 사용하려고 할 때만 발생합니다. – greenapps

답변

2

첫번째 파일 가져 오기에 Contact.Write Inpustream에서의 InputStream 및 이미지 파일로 저장합니다. 마지막으로 해당 이미지 경로를 서버에 업로드하면 해당 이미지 파일을 삭제하기 만하면됩니다. 아래 코드를 참조하십시오.

먼저 연락처 ID를 사용하여 연락처의 InputStream을 가져옵니다.

getContactInputStream("58");//58 is my contact id. 

public void getContactInputStream(String contactId) 
{ 
    Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(contactId)); 
    InputStream stream = ContactsContract.Contacts.openContactPhotoInputStream(getContentResolver(), uri); 
    saveContactImage(stream); 
} 

내부 저장 장치에 파일로 InputStream 쓰기를 가져온 후.

성공적으로 작성한 다음 해당 파일 URL을 사용하여 업로드하십시오. 권한에 따라

file.getAbsolutePath()// Output : /storage/emulated/0/contactImage.png 

는 작업보다 필요합니다 :

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 

또 다른 방법 내부 저장 장치에 이미지 파일을 저장하지 않고 당신은 FileInputStream에이 개조에 TypeFile 클래스를 사용하는 것과 inputStream을 업로드 할 수 있습니다. 자세한 내용은 링크를 참조하십시오 TypeFile in Retrofit for upload file as InputStream

+0

'내부 저장 장치에 InputStream 쓰기 파일을받은 후 .' 그것은 매우 나쁜 조언입니다. InputStream을 가져 오면 이미지를 직접 업로드 할 수 있습니다. OP가 현재 사용하는 FileInputStream를 대신하는 InputStream. 그게 다야. – greenapps

+0

@greenapps, 감사합니다. 내 대답을 업데이트합니다. –

+1

답변을 업데이트 할 필요가 없습니다. 사실 그것은 당신의 생각이 아니며 모든 사람들이 내 의견을 읽을 수 있기 때문에 게시물을 업데이트하는 것은 나쁘다. 대신 나는 그것이 정말로 나쁜 생각이라는 것을 당신이 인정할 것으로 기대했을 것입니다. – greenapps