如何在android中直接分享http图片到twitter?

时间:2016-02-17 12:07:19

标签: android twitter android-twitter

到目前为止,我在stackoverflow帖子中搜索了,我可以直接将文本分享给twitter而不显示分享的弹出对话框。这意味着当我点击按钮时,它会直接重定向到Twitter应用程序并显示文本。

我唯一的问题是我必须直接与Twitter分享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中正确显示。但是图片显示在http url。

任何人都知道如何在不显示链接的情况下直接将图像分享给Twitter应用。

4 个答案:

答案 0 :(得分:5)

您可以使用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:1.8.0@aar') {
        transitive = true;
}

答案 1 :(得分:1)

你可以尝试这项工作吗

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

将此添加到build.gradle依赖项:

dependencies {
 compile('com.twitter.sdk.android:tweet-composer:1.0.5@aar') {
    transitive = true;
 }
}

答案 2 :(得分:0)

这就是你需要的

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

答案 3 :(得分: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();
    }
}