在Twitter分享意图中添加图片(Android)

11

我正在尝试向我的Twitter分享意图中添加一张图片。我在一个类中本地保存了一张图片,然后在另一个类中获取该图片并尝试将其附加到我的意图中。

这是我的代码:

private void shareTwitter(){

    try {

        FileInputStream fis;
        fis = getActivity().openFileInput("photo.jpg");
        Bitmap shot = BitmapFactory.decodeStream(fis);
        File file = new File(MapView.path, "snapshot.jpg");
        if(file.exists()){
            Log.i("FILE", "YES");
        }else{
            Log.i("FILE", "NO");
        }
        Uri uri = Uri.parse(file.getAbsolutePath());
        //Uri uri = Uri.parse("android.resource://com.gobaby.app/drawable/back");             
            Intent intent = new Intent(Intent.ACTION_SEND);
            intent.setType("/*");
            intent.setClassName("com.twitter.android", "com.twitter.android.PostActivity");
            intent.putExtra(Intent.EXTRA_TEXT, "Thiws is a share message");
            intent.putExtra(Intent.EXTRA_STREAM, uri);
            startActivity(intent);            

    } catch (final ActivityNotFoundException e) {
        Toast.makeText(getActivity(), "You don't seem to have twitter installed on this device", Toast.LENGTH_SHORT).show();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
}

目前我的logcat中没有任何异常,我的应用程序只显示一个toast消息,说图像加载失败。

请问我做错了什么?


逐步运行调试运行,并检查您的变量。 - Chad Bingham
我应该检查哪个变量?首先,这是否是正确的方法?我已经检查过文件是否存在,它确实存在。 - Hugo Boss
你能成功地将任何东西保存到 Twitter 上吗? - Chad Bingham
3
截至2014年5月,这种方法并没有奏效 :( - agamov
@agamov,你知道自2014年5月以来的解决方案吗? - Seb83
@Seb83 我已经添加了我的答案,请看一下。 - agamov
3个回答

11

这就是你需要的

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

1
我已经有Twitter应用程序了,但它仍然会出现“您似乎没有在此设备上安装Twitter”的提示。 - Nirav Mehta

7
这对某些人可能会有帮助:
private void sendShareTwit() {
    try {
        Intent tweetIntent = new Intent(Intent.ACTION_SEND);

        String filename = "twitter_image.jpg";
        File imageFile = new File(Environment.getExternalStorageDirectory(), filename);

        tweetIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.twitter_share_text));
        tweetIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(imageFile));
        tweetIntent.setType("image/jpeg");
        PackageManager pm = getActivity().getPackageManager();
        List<ResolveInfo> lract = pm.queryIntentActivities(tweetIntent, PackageManager.MATCH_DEFAULT_ONLY);
        boolean resolved = false;
        for (ResolveInfo ri : lract) {
            if (ri.activityInfo.name.contains("twitter")) {
                tweetIntent.setClassName(ri.activityInfo.packageName,
                        ri.activityInfo.name);
                resolved = true;
                break;
            }
        }

        startActivity(resolved ?
                tweetIntent :
                Intent.createChooser(tweetIntent, "Choose one"));
    } catch (final ActivityNotFoundException e) {
        Toast.makeText(getActivity(), "You don't seem to have twitter installed on this device", Toast.LENGTH_SHORT).show();
    }
}

0

这是解决方案:

private fun shareOnTwitter() {
    val file = File(context!!.filesDir, FILENAME_SHARE_ON_TWITTER)
    val uriForFile = FileProvider.getUriForFile(context!!, com.yourpackage.activity.YourActivity, file)

    val intent = Intent(Intent.ACTION_SEND).apply {
        type = "image/jpeg"
        putExtra(Intent.EXTRA_STREAM, uriForFile)
    }
    startActivity(intent)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接