如何在我的Android应用程序中获取Facebook个人资料图片?

时间:2011-07-15 12:31:16

标签: android

我在android中开发一个应用程序,我必须得到它 facebook照片到我的申请表中。

在Android中有可能吗?

请帮帮我。

谢谢和问候, durgesh Limbani

6 个答案:

答案 0 :(得分:11)

您只需要用户的用户ID,然后就可以调用这样的函数:

/**
 * Function loads the users facebook profile pic
 * 
 * @param userID
 */
public Bitmap getUserPic(String userID) {
    String imageURL;
    Bitmap bitmap = null;
    Log.d(TAG, "Loading Picture");
    imageURL = "http://graph.facebook.com/"+userID+"/picture?type=small";
    try {
        bitmap = BitmapFactory.decodeStream((InputStream)new URL(imageURL).getContent());
    } catch (Exception e) {
        Log.d("TAG", "Loading Picture FAILED");
        e.printStackTrace();
    }
    return bitmap;
}

您可以更改imageURL中的类型以获得不同尺寸的图片。

答案 1 :(得分:10)

对于仍在游荡的人: 使用facebook SDK,您可以在xml中实现ProfilePictureView,如下所示:

<com.facebook.widget.ProfilePictureView
    android:id="@+id/profilePicture"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:is_cropped="true"
    app:preset_size="small" />

然后,一旦你拥有了你的用户ID(必须要求获得那个,但这是另一个故事),你可以获得ProfilePictureView本身并致电:

    ProfilePictureView profilePicture = (ProfilePictureView) view.findViewById(R.id.profilePicture);
    profilePicture.setProfileId(userID);

其中userIDString,其中包含您从Facebook请求的用户ID。

答案 2 :(得分:2)

是的,有可能(对不起,你问的是/否问题:))

使用facebook android sdk,生成一个新的Facebook应用程序ID和所有爵士乐。然后,在您的应用中,您必须要求用户获取访问其个人资料数据的权限,您可以使用图表api获取个人资料图片。

如果您需要有关更具体步骤的帮助,请询问具体问题。

答案 3 :(得分:1)

private void saveFacebookProfilePicture(final String userID){
    new Thread(new Runnable() {

        @Override
        public void run() {
            try{
             URL imageUrl = new URL("https://graph.facebook.com/" + userID + "/picture?type=large");
              Bitmap bitmap = BitmapFactory.decodeStream(imageUrl.openConnection().getInputStream());
              FileOutputStream fileOutputStream = new FileOutputStream(new File(getFilesDir(),ProfileEditActivity.PROFILE_PIC));
              bitmap.compress(CompressFormat.PNG, 100, fileOutputStream);
            }catch(Exception e)
            {
                Log.e(TAG, ""+e.getMessage());
            }



        }
    }).start();


}

答案 4 :(得分:0)

使用Android Facebook API,可以从中获取Facebook数据。 http://www.ibm.com/developerworks/library/x-androidfacebookapi/ 点击此链接。

答案 5 :(得分:0)

您的布局activity_facebook_main为

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:gravity="center_horizontal"
            android:orientation="horizontal" >
            <com.facebook.widget.ProfilePictureView
                android:id="@+id/userProfilePicture"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:layout_gravity="center"
                android:gravity="center_horizontal"
                facebook:preset_size="small" />
            <TextView
                android:id="@+id/userName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_gravity="center"
                android:textColor="#333"
                android:textSize="18sp" />
    </LinearLayout>

和您的FacebookMainActivity代码为

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.TextView;

import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.model.GraphUser;
import com.facebook.widget.ProfilePictureView;

public class FacebookMainActivity extends ActionBarActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_facebook_main);

            Session.openActiveSession(this, true, new Session.StatusCallback() {

                public void call(Session session, SessionState state, Exception exception) {

                if (session.isOpened()) {

                    Request.newMeRequest(session, new Request.GraphUserCallback() {
                        @Override
                          public void onCompleted(GraphUser user, Response response) {
                            if (user != null) {             

                                ProfilePictureView profilePictureView = (ProfilePictureView) findViewById(R.id.userProfilePicture);
                                profilePictureView.setCropped(true);
                                profilePictureView.setProfileId(user.getId());

                                TextView Name = (TextView) findViewById(R.id.userName);                                                     
                                Name.setText(user.getName());

    }
                          }
                        }).executeAsync();
                    }               
                }
            });
        }   

    @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
          Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
        }
}