2012-10-15 9 views
17

मैंने पहले ही इस कोड को आजमाया है, लेकिन मैंने अपने खाते में फोटो साझा नहीं किया है।एक एंड्रॉइड ऐप के माध्यम से google Plus में छवि को कैसे साझा करें?

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

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

लॉग की जांच की? – pedrofurla

+0

जब एप्लिकेशन शुरू होता है तो यह एक टोस्ट को एक संदेश दिखाता है "आप केवल अपने एसडी कार्ड पर फोटो प्रस्तुत कर सकते हैं"। लेकिन मैं एसडी कार्ड से फोटो का पता दे रहा हूं। मुझे क्या समझ में नहीं आ रहा है? –

+0

@ दीपिकालालरा मुझे भी इसी तरह की समस्या है। क्या आप सुझाव दे सकते हैं? – Apparatus

उत्तर

2

अपने कोड में ForGooglePlus गतिविधि को एकीकृत और यूआरएल (imageUrl), विवरण (विवरण पाठ) और उसी के लिए contentUrl (यूआरएल) डाल दिया। नोट: बोले कोड ने भी मेरे ऐप में काम किया।

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(); 
      } 
     } 
    } 

} 
26

Google+ ऐप केवल content:// URIs का समर्थन करता है। इस उद्देश्य के लिए आपको MediaStore एपीआई का उपयोग करने की आवश्यकता होगी।

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

यह मुझे FileNotFoundException() देता है। क्योंकि इसे छवि का पूरा पथ नहीं मिल रहा है, यह केवल "sdcard/1346249742258.jpg" ले रहा है। –

+0

पूर्ण पथ आज़माएं। –

+1

इसके लिए हमें डिवाइस पर अपने डिवाइस के उपयोग के रूप में सही स्थापित करने की आवश्यकता है। मैं इरादा का उपयोग नहीं करना चाहता, क्या हम इसे प्रोग्रामेटिक रूप से कर सकते हैं। SO..http: //stackoverflow.com/questions/18955084/share-photo-on-google-plus-using-android-sdk-not-by-share-intent पर मेरा प्रश्न यहां है – Scorpion

3

मैं भी गूगल पर प्लस एंड्रॉयड अभिप्राय का उपयोग करके मैं डिवाइस के स्क्रीन शॉट ले रहा हूँ के माध्यम से चित्र पोस्ट कर रहा हूँ और गूगल पर पोस्ट करने के साथ साथ, मैं अपने कोड मैं अपवाद FileNotFoundException (हो रही है प्रयोग किया जाता) और आप का उपयोग करने के उल्लेख के रूप में निरपेक्ष पथ मुझे मिल गया त्रुटि, विधि getAbsolutePath() प्रकार स्ट्रिंग मेरी कोड नीचे दिया गया है के लिए अपरिभाषित है कृपया मुझे कोड में सुधार का सुझाव

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; 
     } 
    } 

धन्यवाद और संबंध नितिन

1

पूर्ण पथ का उपयोग न करें।

OnActivityResult() कैमरे से छवि को कैप्चर करने के बाद इसका उपयोग करें।

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); 

यह मेरे लिए काम कर रहा है।

1

अरे दीपिका आप फ़ाइल और न ही पाया अपवाद हो रही है क्योंकि उस गूगल प्लस अनुप्रयोग जिस तरह से आप कोड किया है सिर्फ डिवाइस से स्थानीय ऐप शुरू करने के लिए किया जाता है डिवाइस पर मौजूद नहीं है

यह केवल देशी अगर काम करेंगे एपी actully

otherway के लिए गूगल प्लस एसडीके जो कि साथ छोटे जार फ़ाइल है आप छवि

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

0

आप एपीआई के नीचे का उपयोग कर छवि साझा कर सकते हैं साझा कर सकते हैं मौजूद है। विस्तृत चरणों के लिए जाँच ट्यूटोरियल

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); 
     } 
    } 
} 
संबंधित मुद्दे