Android 如何获取联系人照片的图片路径?
Android How to get image path of contact photo?
我需要将联系人图片上传到服务器,但无法获取真实路径。请任何人帮助我。
我正在低于 uri。
URI: 内容://com.android.contacts/display_photo/2,
首先从Contact.Write文件中的Inpustream中获取InputStream并保存为Image File。成功后最后将该图像路径上传到服务器只需删除该图像文件即可。请参阅下面的代码。
首先,我使用联系人 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 后写入内部存储中的文件。
public void saveContactImage(InputStream inputStream) {
try {
File file = new File(Environment.getExternalStorageDirectory().getPath(), "contactImage.png");
OutputStream output = new FileOutputStream(file);
try {
try {
byte[] buffer = new byte[4 * 1024]; // or other buffer size
int read;
while ((read = inputStream.read(buffer)) != -1) {
output.write(buffer, 0, read);
}
output.flush();
} finally {
output.close();
}
} catch (Exception e) {
e.printStackTrace(); // handle exception, define IOException and others
}
Log.d(TAG," Contact Image Path ===>"+file.getAbsolutePath());
}
catch (Exception e)
{
e.printStackTrace();
}
}
文件写入成功后,使用该文件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" />
另一种无需将图像文件保存在内部存储器中的方法,您可以在 Retrofit 中使用 TypeFile class 将 inputStream 作为 FileInputStream 上传。有关详细信息,请参阅 Link TypeFile in Retrofit for upload file as InputStream
我需要将联系人图片上传到服务器,但无法获取真实路径。请任何人帮助我。
我正在低于 uri。
URI: 内容://com.android.contacts/display_photo/2,
首先从Contact.Write文件中的Inpustream中获取InputStream并保存为Image File。成功后最后将该图像路径上传到服务器只需删除该图像文件即可。请参阅下面的代码。
首先,我使用联系人 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 后写入内部存储中的文件。
public void saveContactImage(InputStream inputStream) {
try {
File file = new File(Environment.getExternalStorageDirectory().getPath(), "contactImage.png");
OutputStream output = new FileOutputStream(file);
try {
try {
byte[] buffer = new byte[4 * 1024]; // or other buffer size
int read;
while ((read = inputStream.read(buffer)) != -1) {
output.write(buffer, 0, read);
}
output.flush();
} finally {
output.close();
}
} catch (Exception e) {
e.printStackTrace(); // handle exception, define IOException and others
}
Log.d(TAG," Contact Image Path ===>"+file.getAbsolutePath());
}
catch (Exception e)
{
e.printStackTrace();
}
}
文件写入成功后,使用该文件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" />
另一种无需将图像文件保存在内部存储器中的方法,您可以在 Retrofit 中使用 TypeFile class 将 inputStream 作为 FileInputStream 上传。有关详细信息,请参阅 Link TypeFile in Retrofit for upload file as InputStream