2015-04-03 23 views
7

Yeni SDK'daki SharePhoto & SharePhotoContent sınıflarını kullanarak bir fotoğraf paylaşmaya çalışıyorum. Yerel olarak saklanan bir görüntü yerine bir resim URL'si kullanmak istiyorum. Ben Bir resmin URL'sini kullanmaya çalıştığınızda AncakAndroid paylaş image URL with Facebook SharePhotoContent

Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.carrots); 

SharePhoto photo = new SharePhoto.Builder() 
        .setImageBitmap(image) 
        .build(); 

SharePhotoContent content = new SharePhotoContent.Builder() 
           .addPhoto(photo) 
           .build(); 

shareDialog.show(content); 

:

Ben yerel olarak saklanan çekilebilir kaynağı kullanarak bir görüntü paylaşabiliriz

SharePhoto photo = new SharePhoto.Builder() 
         .setImageUrl(Uri.parse("http://s3-ak.buzzfed.com/static/images/public/verticals/food-title.png?v=201504021353")) 
         .build(); 

görüyorum hepsi boştur Facebook shareDialog'da yayınla.

Başkası bunu denedi ve işe aldı mı?

Çok teşekkürler! yerine yerel görüntünün bağlantısını kullanıyorsanız

+0

Bir SharePhoto oluşturmak için tam kodunuzu kullandığınızda, bunun yerine şu hatayı görüyorum: http://i.imgur.com/O7TFGsM.jpg. Uri.parse'ın gerçek olmayan bir Uri'ye geri verdiğinden emin misin? Bazen Uri.parse() yöntemi sessizce başarısız olur ve sadece size boş verir. –

+0

@MingLi Test sırasında bu hata mesajını hiç görmedim. Ve Uri'nin sıfır olmadığı konusunda olumluyum. –

+0

Yukarıdaki gönderide bu URL'yi kullanıyor musunuz? Eğer öyleyse, o zaman bir zip olarak küçük bir örnek uygulaması ile https://developers.facebook.com/bugs bir hata dosya, daha sonra neler olup bittiğini bir göz atabilirsiniz. –

cevap

1

, size bir resmin URL'sini paylaşmak isterseniz doc

ShareLinkContent linkContent = new ShareLinkContent.Builder() 
     .setContentTitle("title") 
     .setContentDescription("description") 
     .setContentUrl(Uri.parse("your link")) 
     .build(); 
+0

Bu yüzden, bir bitmap ile yaptığı gibi bir fotoğrafı görüntülemek için sadece bir url kullanamıyorum? Ve değilse, o zaman SharePhoto modelindeki 'setImageUrl' işlevinin anlamı nedir? –

+0

SharePoint.Builder ile deneyebilir misiniz() photo = new SharePhoto.Builder() –

+0

Evet denedim. Benim sorum –

1

itibaren yerine SharePhoto ait ShareDialog, kullanmak zorunda, o zaman sharelinkcontent kullanmalısınız: Bu benim kodudur ve bu işe ama bir başlık veya açıklama sadece görüntü url olmadan: benim yaptığım FB yayın ardından görüntüyü indirip sunucudan bitmap almak ve oldu

ShareLinkContent linkContent = new ShareLinkContent.Builder() 
      .setContentTitle("Shared from nearbyme application") 
      .setContentDescription("This is a wonderful place") 
      .setContentUrl(Uri.parse("http://www.villathena.com/images/nearby/thumbs/le-bus-bleu-private-tours.jpg")) 
      .setImageUrl(Uri.parse("http://www.villathena.com/images/nearby/thumbs/le-bus-bleu-private-tours.jpg")) 
      .build(); 
     shareDialog.show(content); 
1

:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    FacebookSdk.sdkInitialize(getApplicationContext()); 

    Button btn = (Button)findViewById(R.id.btn_share); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getImage(); 
     } 
    }); 
} 

private void getImage(){ 
    new DownloadImgTask().execute("http://url.com/1.jpg"); 
} 

private void postFB(Bitmap bm){ 
    SharePhoto photo = new SharePhoto.Builder().setBitmap(bm).build(); 
    SharePhotoContent content = new SharePhotoContent.Builder().addPhoto(photo).build(); 
    ShareDialog dialog = new ShareDialog(this); 
    if (dialog.canShow(SharePhotoContent.class)){ 
     dialog.show(content); 
    } 
    else{ 
     Log.d("Activity", "you cannot share photos :("); 
    } 

} 

private class DownloadImgTask extends AsyncTask<String, Void, Bitmap>{ 

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

    protected void onPostExecute(Bitmap result) { 
     postFB(result); 
    } 
} 
+0

Evet, işte böyle bitti. –