Get photo from google plus profile

Asked

Viewed 76 times

0

I have the following method to perform a Silentlogin with google +

 private void silentLogin() throws MalformedURLException {
        OptionalPendingResult<GoogleSignInResult> pendingResult = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient);
        if (pendingResult != null) {
            if (pendingResult.isDone()) {
                GoogleSignInResult signInResult = pendingResult.get();

                profile_pic = new **URL("https://plus.google.com/s2/photos/profile/" + signInResult.getSignInAccount().getId() + "?sz=100");** //url para image
                new LoadImage().execute();

            } else {
                pendingResult.setResultCallback(new ResultCallback<GoogleSignInResult>() {
                    @Override
                    public void onResult(GoogleSignInResult googleSignInResult) {
                        GoogleSignInResult signInResult = googleSignInResult;

                        try {
                            profile_pic = new URL("https://plus.google.com/s2/photos/profile/" + signInResult.getSignInAccount().getId() + "?sz=100");
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        }
                        new LoadImage().execute();
                    }
                });
            }
        } else {
            progressBar.setVisibility(View.GONE);
            startActivity(new Intent(SplashActivity.this, LoginActivity.class));
            finish();
        }
    }

And I have the following class to get the picture

private class Loadimage extends Asynctask {

        @Override
        protected Void doInBackground(Void... params) {
            try {
                Bitmap mIcon_val = BitmapFactory.decodeStream(profile_pic.openConnection().getInputStream());
                UVSingleton.getInstance().setProfilePicture(mIcon_val);

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        progressBar.setVisibility(View.GONE);
                    }
                });
                startActivity(new Intent(SplashActivity.this, MainActivity.class));
                finish();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }

However I have problem with the url I create because it returns me that the photo does not exist.

What is the right way to get the google profile photo + ?

2 answers

0

I’ve used code below and it worked perfectly.

private void getProfileInformation() {
    try {
        if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) {
            Person currentPerson = Plus.PeopleApi
                    .getCurrentPerson(mGoogleApiClient);
            String personName = currentPerson.getDisplayName();
            String personPhotoUrl = currentPerson.getImage().getUrl();
            String personGooglePlusProfile = currentPerson.getUrl();
            String email = Plus.AccountApi.getAccountName(mGoogleApiClient);

            Log.e(TAG, "Name: " + personName + ", plusProfile: "
                    + personGooglePlusProfile + ", email: " + email
                    + ", Image: " + personPhotoUrl);

            txtName.setText(personName);
            txtEmail.setText(email);

            // by default the profile url gives 50x50 px image only
            // we can replace the value with whatever dimension we want by
            // replacing sz=X
            personPhotoUrl = personPhotoUrl.substring(0,
                    personPhotoUrl.length() - 2)
                    + PROFILE_PIC_SIZE;

            new LoadProfileImage(imgProfilePic).execute(personPhotoUrl);

        } else {
            Toast.makeText(getApplicationContext(),
                    "Person information is null", Toast.LENGTH_LONG).show();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * Background Async task to load user profile picture from url
 * */
private class LoadProfileImage extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public LoadProfileImage(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}

Any other questions refer to the tutorial link.

http://www.androidhive.info/2014/02/android-login-with-google-plus-account-1/

0

I solved my problem this way:

GoogleSignInAccount acct = result.getSignInAccount();
String url = "http://" + acct.getPhotoUrl().getAuthority() + acct.getPhotoUrl().getPath() + "?sz=76";

And to download the image I used the Picasso lib and passed the obtained url;

 Picasso.with(this).load(url).into(profilePhoto);

Browser other questions tagged

You are not signed in. Login or sign up in order to post.