連絡先 ID(long) を受け取り、対応する連絡先 pic(Bitmap または InputStream) を返す関数が必要です。しかし、私はそれをやってのけることができません。
PS - 最小 API レベル = 10
連絡先 ID(long) を受け取り、対応する連絡先 pic(Bitmap または InputStream) を返す関数が必要です。しかし、私はそれをやってのけることができません。
PS - 最小 API レベル = 10
次のコードを試してください。
private void setContactInfo(long id){
Bitmap photoBitmap = null;
Uri contactUri = ContentUris.withAppendedId(
ContactsContract.Contacts.CONTENT_URI, id);
Cursor cursor = managedQuery(contactUri, null, null, null, null);
cursor.moveToFirst();
contact_text.setText(cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));//contact.text is a textView used to displays the contact name
String id = getIntent().getData().getLastPathSegment();
// Photo cursor
String photoWhere = ContactsContract.Data.CONTACT_ID + " = ? AND "
+ ContactsContract.Data.MIMETYPE + " = ?";
String[] photoWhereParams = new String[] { id,
ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE };
Cursor photoCur = managedQuery(ContactsContract.Data.CONTENT_URI, null,
photoWhere, photoWhereParams, null);
photoCur.moveToFirst();
if (photoCur.moveToFirst() && photoCur != null) {
byte[] photoBlob = photoCur.getBlob(photoCur
.getColumnIndex(Photo.PHOTO));
if (photoBlob != null) {
photoBitmap = BitmapFactory.decodeByteArray(photoBlob, 0,
photoBlob.length);
contact_image.setImageBitmap(photoBitmap);//contact_image is an ImageView
} else {
photoBitmap = BitmapFactory.decodeResource(getResources(),
android.R.drawable.ic_menu_report_image);//android.R.drawable.ic_menu_report_image is the default image if a Contact doesn't have any image stored
contact_image.setImageBitmap(photoBitmap);
}
}
cursor.close;
photoCur.close;
}
お役に立てれば。
private ByteArrayInputStream getPhoto()
{
Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, id);
Uri photoUri = Uri.withAppendedPath(contactUri, Contacts.Photo.CONTENT_DIRECTORY);
Cursor cursor = getContentResolver().query(photoUri, new String[] {ContactsContract.CommonDataKinds.Photo.PHOTO}, null, null, null);
if (cursor == null) {
return null;
}
try
{
if (cursor.moveToFirst())
{
byte[] data = cursor.getBlob(0);
if (data != null)
{
return new ByteArrayInputStream(data);
}
}
}
finally
{
cursor.close();
}
return null;
}
これは私のコードです。それは働いています。
アクティビティでは、画像をダウンロードするためのURLが必要です。次の方法を使用します (このコードが、画像をダウンロードするアクティビティにある必要があることを確認してください)。
private class DownloadProfilePicture extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
InputStream in = null;
int response = -1;
URL url = "your image url";
URLConnection conn = null;
HttpURLConnection httpConn = null;
conn = url.openConnection();
if (!(conn instanceof HttpURLConnection))
throw new IOException("Not an HTTP connection");
httpConn = (HttpURLConnection) conn;
httpConn.setAllowUserInteraction(false);
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.connect();
response = httpConn.getResponseCode();
if (response == HttpURLConnection.HTTP_OK) {
in = httpConn.getInputStream();
}
if (in != null && in.available() > 807) {
yourBitmaptype.setBitmap(
BitmapFactory.decodeStream(in));
} else {
users.get(screenName).setBitmap(
BitmapFactory.decodeResource(getResources(),
R.drawable.default_profile_pic));
}
in.close();
in = null;
} catch (Exception e) {
users.get(temp).setBitmap(
BitmapFactory.decodeResource(getResources(),
R.drawable.default_profile_pic));
Log.e(TAG, "Downloading Image Exception.. Using default");
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// use post execute logic
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
// use pre execute logic
super.onPreExecute();
}
}
onCreate()
そしてそれを次のように呼び出しますnew DownloadProfilePicture().execute();