How to share image in google Plus through an android app?

The Google+ app only supports content:// URIs. You will need to use the MediaStore API for this purpose.

 File tmpFile = new File("/path/to/image");
 final String photoUri = MediaStore.Images.Media.insertImage(
         getContentResolver(), tmpFile.getAbsolutePath(), null, null);

 Intent shareIntent = ShareCompat.IntentBuilder.from(this)
         .setText("Hello from Google+!")
         .setType("image/jpeg")
         .setStream(Uri.parse(photoUri))
         .getIntent()
         .setPackage("com.google.android.apps.plus");

Integrate ForGooglePlus Activity in your code and put URL(imageUrl) ,Description(description text) and contentUrl(URL) for the same. Note : bellow code also worked in my app.

public class ForGooglePlus extends Activity
{
    private String imageUrl, description, contentUrl;
    private Context mContext;
    private int REQUEST_FOR_GOOGLE_PLUS = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        mContext = this;
        imageUrl = getIntent().getStringExtra("URL");
        description = getIntent().getStringExtra("Description");
        contentUrl = getIntent().getStringExtra("contentUrl");

        if (isPackageInstalled("com.google.android.apps.plus", mContext)) {
            if (imageUrl == null) {
                imageUrl = "";
            }
            if (description == null) {
                description = "";
            }
            // Intent shareIntent = new PlusShare.Builder(this)
            // .setType("image/jpeg")
            // .setText(description)
            // .setStream(getUriFromUrl(imageUrl))
            // .setContentUrl(Uri.parse(contentUrl))
            // .getIntent();

            Uri uri = getUriFromUrl(imageUrl);
            if (uri != null) {
                Intent shareIntent = ShareCompat.IntentBuilder
                        .from(ForGooglePlus.this)
                        .setText(description + "\n" + contentUrl)
                        .setType("image/jpeg").setStream(uri).getIntent()
                        .setPackage("com.google.android.apps.plus");
                startActivityForResult(shareIntent, REQUEST_FOR_GOOGLE_PLUS);
            } else {
                Intent shareIntent = ShareCompat.IntentBuilder
                        .from(ForGooglePlus.this)
                        .setText(description + "\n" + contentUrl)
                        .setType("image/jpeg").getIntent()
                        .setPackage("com.google.android.apps.plus");
                startActivityForResult(shareIntent, REQUEST_FOR_GOOGLE_PLUS);
            }
        } else {
            Toast.makeText(mContext, "Application not found", Toast.LENGTH_LONG)
                    .show();
            finish();
        }
    }

    public Uri getUriFromUrl(String thisUrl) {
        try {

            Bitmap inImage = ImageLoader.getInstance().loadImageSync(thisUrl);
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
            String path = Images.Media.insertImage(
                    mContext.getContentResolver(), inImage, "Title", null);
            return Uri.parse(path);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();

        }
        return null;
    }

    private boolean isPackageInstalled(String packagename, Context context) {
        PackageManager pm = context.getPackageManager();
        try {
            pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES);
            return true;
        } catch (NameNotFoundException e) {
            return false;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == REQUEST_FOR_GOOGLE_PLUS) {
            if (resultCode == RESULT_OK) {
                finish();
            } else {
                Toast.makeText(mContext,
                        mContext.getString(R.string.msg_gp_cancel),
                        Toast.LENGTH_LONG).show();
                finish();
            }
        }
    }

}

I am also posting image on google plus through android using intent i am taking screen shot of device and posting it on google plus, i used your code i am getting exception FileNotFoundException() and as you mention to use absolute path i got error, The method getAbsolutePath() is undefined for the type String my code is given below please suggest me correction in code

    package com.testproject;


    import java.io.File;
    import java.io.FileNotFoundException;

    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.RelativeLayout;

    public class TestProjectActivity extends Activity {

        private Button share_btn = null; 
        private String url=null;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            share_btn = (Button)findViewById(R.id.share_btn);
            share_btn.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    Intent intent=new Intent(TestProjectActivity.this,ShareDialogActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);    
                    startActivityForResult(intent, 1);  
                }
            });
        }
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            String url =takeScreenShot();
            super.onActivityResult(requestCode, resultCode, data);
            switch (resultCode) {
            case 1:
                String share = data.getExtras().getString("NAME");
                if(share!=null && share.equalsIgnoreCase("Share with Instagram")){
                    Intent i = new Intent(Intent.ACTION_SEND);
                    i.setType("image/jpg");
                    i.putExtra(Intent.EXTRA_STREAM, Uri.parse(url));
                    startActivity(Intent.createChooser(i, "Share Image"));
                }

                if(share!=null && share.equalsIgnoreCase("Share with GooglePlus")){
                    Intent shareIntent = new Intent(Intent.ACTION_SEND);
                    File tmpFile = new File(url);
                    String photoUri=null;
                    photoUri = url.getAbsolutePath();
                    try {
                        photoUri = MediaStore.Images.Media.insertImage(
                                getContentResolver(), tmpFile.getAbsolutePath(), null, null);
                        shareIntent = ShareCompat.IntentBuilder.from(this)
                        .setText("Hello from Google+!")
                        .setType("image/jpeg")
                        .setStream(Uri.parse(photoUri))
                        .getIntent()
                        .setPackage("com.google.android.apps.plus");
                        startActivity(shareIntent);
                    } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                break;
            }
        }
        public String takeScreenShot(){
            try{
                RelativeLayout  view = (RelativeLayout)findViewById(R.id.icflag_layout);
                View v1 = view.getRootView();
                System.out.println("Root View : "+v1);
                v1.setDrawingCacheEnabled(true);
                Bitmap bm = v1.getDrawingCache();
                url =MediaStore.Images.Media.insertImage(getContentResolver(), bm,"screeshot.jpg", 1233+ ".jpg Card Image");
            }
            catch(OutOfMemoryError e){

            }
            return url;
        }
    }

Thank you and regards Nitin