2014-02-19 4 views
1

Я знаю, что можно получить фотографию контакта, используя что-то вроде:Получить RawContact фото

public InputStream getContactPhotoInputStream() throws IOException { 
     Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(mContactId)); 
     InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(contentResolver, uri); 

     return is; 
} 

Но теперь мне нужно получить доступ к фото всех RawContact в (тот, который есть). Но я не могу. Из документации ContactsContract.RawContacts.DisplayPhoto фотография сохраняется в виде файла, а миниатюра сохраняется как Blob в таблице Data. Я могу получить миниатюрную фотографию с простым запросом в базу данных и получить Blob, но теперь мне нужна фотография оригинального размера, и я не могу найти способ ее получить. Я не могу найти информацию о документации для Android ни на google.

Я пробовал этот метод (адаптированный из файла фотографии сохранения), чтобы получить файл с фотографией, но безуспешно.

public InputStream getRawContactPhotoInputStream() throws IOException 
    { 
     Uri rawContactPhotoUri = Uri.withAppendedPath(
       ContentUris.withAppendedId(RawContacts.CONTENT_URI, Long.parseLong(mRawContactId)), 
       RawContacts.DisplayPhoto.CONTENT_DIRECTORY); 

     AssetFileDescriptor fd = contentResolver.openAssetFileDescriptor(rawContactPhotoUri, "rw"); 
     InputStream is = fd.createInputStream(); 

     fd.close(); 

     return is; 

    } 

Я получаю это на LogCat:

02-18 23:44:27.195: D/PhotoRestlet(8984): Representation1 size < 1 
02-18 23:44:27.207: W/System.err(8984): 2014-02-18 23:44:27 10.17.1.54 - - 8080 GET /contact/photo/6 - 200 - 0 35 http://10.17.1.72:8080 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36 - 
02-18 23:44:27.226: W/System.err(8984): Unable to read the entity 
02-18 23:44:27.226: W/System.err(8984): java.io.IOException: read failed: EBADF (Bad file number) 
02-18 23:44:27.226: W/System.err(8984):  at java.nio.FileChannelImpl.readImpl(FileChannelImpl.java:315) 
02-18 23:44:27.226: W/System.err(8984):  at java.nio.FileChannelImpl.read(FileChannelImpl.java:287) 
02-18 23:44:27.226: W/System.err(8984):  at org.restlet.engine.io.ReadableChunkingChannel.read(ReadableChunkingChannel.java:137) 
02-18 23:44:27.226: W/System.err(8984):  at org.restlet.engine.io.Buffer.fill(Buffer.java:395) 
02-18 23:44:27.226: W/System.err(8984):  at org.restlet.engine.connector.OutboundWay.onFill(OutboundWay.java:388) 
02-18 23:44:27.226: W/System.err(8984):  at org.restlet.engine.io.Buffer.process(Buffer.java:601) 
02-18 23:44:27.226: W/System.err(8984):  at org.restlet.engine.connector.Way.processIoBuffer(Way.java:503) 
02-18 23:44:27.226: W/System.err(8984):  at org.restlet.engine.connector.OutboundWay.processIoBuffer(OutboundWay.java:463) 
02-18 23:44:27.226: W/System.err(8984):  at org.restlet.engine.connector.Way.onSelected(Way.java:456) 
02-18 23:44:27.230: W/System.err(8984):  at org.restlet.util.SelectionRegistration.onSelected(SelectionRegistration.java:325) 
02-18 23:44:27.230: W/System.err(8984):  at org.restlet.engine.connector.Connection.onSelected(Connection.java:617) 
02-18 23:44:27.230: W/System.err(8984):  at org.restlet.util.SelectionRegistration.onSelected(SelectionRegistration.java:325) 
02-18 23:44:27.230: W/System.err(8984):  at org.restlet.engine.connector.ConnectionController.onSelected(ConnectionController.java:219) 
02-18 23:44:27.230: W/System.err(8984):  at org.restlet.engine.connector.ServerConnectionController.onSelected(ServerConnectionController.java:99) 
02-18 23:44:27.230: W/System.err(8984):  at org.restlet.engine.connector.ConnectionController.selectKeys(ConnectionController.java:308) 
02-18 23:44:27.230: W/System.err(8984):  at org.restlet.engine.connector.ConnectionController.doRun(ConnectionController.java:171) 
02-18 23:44:27.230: W/System.err(8984):  at org.restlet.engine.connector.Controller.run(Controller.java:159) 
02-18 23:44:27.230: W/System.err(8984):  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) 
02-18 23:44:27.230: W/System.err(8984):  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
02-18 23:44:27.230: W/System.err(8984):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
02-18 23:44:27.230: W/System.err(8984):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
02-18 23:44:27.230: W/System.err(8984):  at java.lang.Thread.run(Thread.java:841) 
02-18 23:44:27.230: W/System.err(8984): Caused by: libcore.io.ErrnoException: read failed: EBADF (Bad file number) 
02-18 23:44:27.230: W/System.err(8984):  at libcore.io.Posix.readBytes(Native Method) 
02-18 23:44:27.230: W/System.err(8984):  at libcore.io.Posix.read(Posix.java:123) 
02-18 23:44:27.230: W/System.err(8984):  at libcore.io.BlockGuardOs.read(BlockGuardOs.java:144) 
02-18 23:44:27.230: W/System.err(8984):  at java.nio.FileChannelImpl.readImpl(FileChannelImpl.java:303) 
02-18 23:44:27.230: W/System.err(8984):  ... 21 more 
02-18 23:44:27.250: D/PhotoRestlet(8984): Representation1 size < 1 
02-18 23:44:27.250: W/System.err(8984): 2014-02-18 23:44:27 10.17.1.54 - - 8080 GET /contact/photo/6 - 1001 - 0 17 http://10.17.1.72:8080 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36 - 
02-18 23:44:27.269: D/PhotoRestlet(8984): Representation1 size < 1 
02-18 23:44:27.273: W/System.err(8984): 2014-02-18 23:44:27 10.17.1.54 - - 8080 GET /contact/photo/6 - 1001 - 0 19 http://10.17.1.72:8080 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36 - 
02-18 23:44:27.308: D/skia(1925): --- SkImageDecoder::Factory returned null 
02-18 23:44:27.308: D/skia(1925): --- SkImageDecoder::Factory returned null 
02-18 23:44:27.316: D/skia(1925): --- SkImageDecoder::Factory returned null 

ответ

2

После много копаться, глядя исходный код Android, исчерпывающе, я нашел способ, чтобы получить изображение из исходного контакта.

Используя собственный код Android, чтобы получить его, я сделал свое собственное решение (моя проблема заключалась в получении URI исходного кода, я не мог найти способ его получить). Так что здесь public static boolean savePhotoFromUriToUr я сделал это:

public InputStream getBitmapFromUri(String rawContactId) throws FileNotFoundException { 

     final Uri photoUri = Uri.withAppendedPath(
       ContentUris.withAppendedId(RawContacts.CONTENT_URI, Long.valueOf(rawContactId)), RawContacts.DisplayPhoto.CONTENT_DIRECTORY); 
     final InputStream imageStream = contentResolver.openInputStream(photoUri); 

     return imageStream; 
} 

Так вот, как получить фото необработанного контакта.

Смежные вопросы