在 Android 上共享屏幕截图。每次共享同一张图片

Posted

技术标签:

【中文标题】在 Android 上共享屏幕截图。每次共享同一张图片【英文标题】:Sharing Screenshot on Android. Shares the same image every time 【发布时间】:2014-05-21 08:18:09 【问题描述】:

我创建了一个截取屏幕截图的函数,将其保存在 .jpeg 类型的临时文件中,然后允许用户在 Facebook 或蓝牙上共享它。这是我的分享功能:

public Bitmap Share(View v) 
    // Sound
    soundPool.play(button_sound, 1.0f, 1.0f, 0, 0, 1.0f);

    // Image
    v.setDrawingCacheEnabled(true);
    v.setLayerType(View.LAYER_TYPE_NONE, null);
    Bitmap bitmap = Bitmap.createBitmap(v.getDrawingCache());
    File file = new File(Environment.getExternalStorageDirectory()
            + File.separator + "temporary_file.jpg");
    try 
        file.createNewFile();
        FileOutputStream ostream = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 90, ostream);
        ostream.close();
     catch (Exception e) 
        e.printStackTrace();
    

    // Share
    Intent share = new Intent(Intent.ACTION_SEND);
    share.setType("image/jpeg");
    String filel = "file://" + Environment.getExternalStorageDirectory()
            + File.separator + "temporary_file.jpg";
    share.putExtra(Intent.EXTRA_STREAM, Uri.parse(filel));

    startActivity(Intent.createChooser(share, "Share Image"));
    return bitmap;

我的问题是它会截取屏幕截图,但是当我尝试分享新的截图时,它总是一遍又一遍地分享相同的截图。当我使用文件管理器检查时,图像不同。所以我不知道是什么原因造成的。

非常感谢您抽出宝贵时间。

【问题讨论】:

你有没有注意到新创建的文件名和旧文件名一样,为什么不随机生成一个文件名。 【参考方案1】:

首先,file.createNewFile() 仅在文件不存在时有效。失败时不抛出任何异常,只返回true表示成功,false表示失败,

bitmap.compress(Bitmap.CompressFormat.JPEG, 90, ostream); 也是如此。该方法在失败时也不会抛出任何异常,并且只返回true表示成功,false表示失败,

我不知道它是否会导致错误,但您可能想调查一下。例如,您可以尝试在文件已经存在时先删除它。

【讨论】:

【参考方案2】:

请在 getBitmap 之前无效()您的视图

看起来像:

v.inValidated(); 
v.setDrawingCacheEnabled(true);

【讨论】:

以上是关于在 Android 上共享屏幕截图。每次共享同一张图片的主要内容,如果未能解决你的问题,请参考以下文章

两个安卓设备之间的屏幕共享

如何在 Swift 中创建类似 Android 的共享选项 [重复]

使用我的应用程序当前视图的 ShareActionProvider 共享屏幕截图

在同一张地图上使用 KML、地址查找、方向和“共享地图”

通过 android 应用程序共享图像时 Facebook 上传失败错误

共享屏幕截图的活动控制器显示为空