2016-02-17 18 views
6

Do tej pory szukałem w postu stackoverflow i mogę udostępnić tekst bezpośrednio do twittera bez pokazywania okna popup do udostępniania. Oznacza to, że po kliknięciu przycisku jest to bezpośrednio przekierowanie do aplikacji Twitter i pokazuje tekst.Jak udostępnić obraz http bezpośrednio do Twittera w Androidzie?

Jedynym moim problemem jest udostępnianie obrazu http bezpośrednio do Twittera.

Poniżej napisali kod, co starałem dotąd:

UsersAdapter.java:

// Create intent using ACTION_VIEW and a normal Twitter url: 
     String tweetUrl = String.format("https://twitter.com/intent/tweet?text=%s&url=%s", 
       urlEncode(strShareText), 
       urlEncode(strShareImageUrl)); 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(tweetUrl)); 

     // Narrow down to official Twitter app, if available: 
     List<ResolveInfo> matches = context.getPackageManager().queryIntentActivities(intent, 0); 
     for (ResolveInfo info : matches) { 
      if (info.activityInfo.packageName.toLowerCase().startsWith("com.twitter")) { 
       intent.setPackage(info.activityInfo.packageName); 
      } 
     } 

     context.startActivity(intent); 

W powyższym kodzie Tekst jest wyświetlany poprawnie w twitter.But obraz jest wyświetlany w http adres URL.

Każdy wie, jak udostępnić obraz bezpośrednio do aplikacji Twitter bez pokazywania linku.

+0

Dlaczego nie używasz API Twittera? –

+0

Jedynymi osadzonymi obrazami z intencją WWW są te z domenami 'pic.twitter.com'. – oldergod

+0

@oldergod, możesz rozwinąć więcej. Nie dostaję cię. – Steve

Odpowiedz

7

Można użyć okna dialogowego TwitterComposer.

Oto przykładowy kod.

TweetComposer.Builder builder = new TweetComposer.Builder(mActivity) 
       .text("hello text"); 
       .image(Uri.parse("https://media-mediatemple.netdna-ssl.com/wp-content/uploads/2016/01/07-responsive-image-example-castle-7-opt.jpg")); 
builder.show(); 

Dodaj zależnościami w Gradle plik

compile('com.twitter.sdk.android:twitter:[email protected]') { 
     transitive = true; 
} 
0

To jest to, czego potrzebujesz

intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file); 
0

można spróbować tej jego pracy dla mnie

obrazem Uri:

File myImageFile = new File("/path/to/image"); 
Uri myImageUri = Uri.fromFile(myImageFile); 

Intent Builder

TweetComposer.Builder builder = new TweetComposer.Builder(this) 
    .text("just setting up my Fabric.") 
    .image(myImageUri); 
builder.show(); 

Dodaj do Twoich zależności build.gradle:

dependencies { 
compile('com.twitter.sdk.android:tweet-composer:[email protected]') { 
    transitive = true; 
} 
} 
+0

wyświetlasz obraz ze ścieżki pliku, prawda? Muszę załadować obraz http z api.so to nie działa z tym kodem – Steve

+0

Ładuję obraz http z Glide w lokalny/path/to/image przed użyciem to – MrZ

+0

Bez pobierania obrazu z ścieżki do pliku muszę udostępnić obraz bezpośrednio na twitter.jest to możliwe? – Steve

0

Aby Zadzwoń:

new PostPicture(MyActivity.this).execute("IMAGE_URL"); 

post obrazku:

private class PostPicture extends AsyncTask<String, Void, File> { 
    private final Context context; 

    public PostPicture(Context context) { 
     this.context = context; 
    } 

    @Override 
    protected File doInBackground(String... params) { 

     FutureTarget<File> future = Glide.with(getApplicationContext()) 
       .load(params[0]) 
       .downloadOnly(600, 600); 

     File file = null; 
     try { 
      file = future.get(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return file; 
    } 

    @Override 
    protected void onPostExecute(File result) { 
     if (result == null) { 
      return ; 
     } 

     Uri uri = FileProvider.getUriForFile(getApplicationContext(), 
     getApplicationContext().getPackageName(), result); 
     postIt(uri); 
    } 

    private void postIt(Uri result) { 
     TweetComposer.Builder builder = new TweetComposer.Builder(this) 
       .text("Post Image from URl.") 
       .image(result); 
     builder.show(); 
    } 
}