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

前端 未结 6 1740
既然无缘
既然无缘 2020-12-24 07:54

I have already tried this code, but i didn\'t saw photo shared in my account.

File file = new File(\"sdcard/1346249742258.jpg\");
String photoUri = null;
pho         


        
相关标签:
6条回答
  • 2020-12-24 08:31

    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");
    
    0 讨论(0)
  • 2020-12-24 08:35

    You can share image using below api's. For detailed steps check tutorial

    http://androidsrc.net/integrating-google-plus-sign-in-into-your-android-application/

     /**
         * API to process media post request start activity with MIME type as video
         * and image
         */
        private void processShareMedia() {
            Intent photoPicker = new Intent(Intent.ACTION_PICK);
            photoPicker.setType("video/*, image/*");
            startActivityForResult(photoPicker, PICK_MEDIA_REQUEST_CODE);
    
        }
    
    /**
     * Handle results for your startActivityForResult() calls. Use requestCode
     * to differentiate.
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == PICK_MEDIA_REQUEST_CODE) {
            // If picking media is success, create share post using
            // PlusShare.Builder
            if (resultCode == RESULT_OK) {
                Uri selectedImage = data.getData();
                ContentResolver cr = this.getContentResolver();
                String mime = cr.getType(selectedImage);
    
                PlusShare.Builder share = new PlusShare.Builder(this);
                share.setText("Hello from AndroidSRC.net");
                share.addStream(selectedImage);
                share.setType(mime);
                startActivityForResult(share.getIntent(),
                        SHARE_MEDIA_REQUEST_CODE);
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-24 08:37

    HEy Deepika you are getting file nor found exception because that google plus app is not present on the device the way you have coded is just to start the native app from the device

    it will work only if the native ap is actully present

    otherway is to have google plus sdk which is small jar file with that you can share image

    https://developers.google.com/+/mobile/android/

    0 讨论(0)
  • 2020-12-24 08:46

    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

    0 讨论(0)
  • 2020-12-24 08:51

    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();
                }
            }
        }
    
    }
    
    0 讨论(0)
  • 2020-12-24 08:53

    Don't use absolute path.

    OnActivityResult() use this after capturing image from camera.

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

    This is working for me.

    0 讨论(0)
提交回复
热议问题