2016-02-17 2 views
6

До сих пор я искал в postoffflow post, и я могу поделиться текстом напрямую с твиттером, не показывая всплывающее диалоговое окно для share.That означает, что когда я нажимаю кнопку, он напрямую перенаправляется в приложение Twitter и показывает текст.Как передать http-изображение прямо в twitter в android?

Моя единственная проблема заключается в том, что мне нужно передать http-образ напрямую в твиттер.

Ниже я разместил код, что я пытался до сих пор:

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

В этом выше код Текст отображается правильно в twitter.But изображение показывается в HTTP URL-адрес.

Кто-нибудь знает, как обмениваться имиджем напрямую в twitter app, не показывая ссылку.

+0

Почему вы не используете API Twitter? –

+0

единственные внедренные изображения с веб-намерениями - это те, которые принадлежат доменам 'pic.twitter.com'. – oldergod

+0

@oldergod, пожалуйста, уточните больше. Я не понимаю вас. – Steve

ответ

7

Вы можете использовать диалоговое окно TwitterComposer.

Вот пример кода.

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

Добавить зависимостей в Gradle файле

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

Это то, что вам нужно

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

вы можете попробовать эту свою работу для меня

The изображения Uri:

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

Намерение Builder

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

Добавьте это к вашей зависимости build.gradle:

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

Вы показываете изображение из пути к файлу правильно? Мне нужно загрузить http-образ из api.so, он не работает с этим кодом. – Steve

+0

. Я загружаю http-образ с помощью Glide в local/path/to/image перед его использованием. – MrZ

+0

Без получения изображения из пути к файлу мне нужно поделиться изображением напрямую в twitter.is это можно сделать? – Steve

0

для вызова:

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

сообщение картинка:

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