如何使用共享文本发送图像

时间:2015-07-16 06:58:52

标签: android android-intent android-sharing

目前我使用以下代码共享文字:

Intent i = new Intent(android.content.Intent.ACTION_SEND);
    i.setType("text/plain");

    i.putExtra(android.content.Intent.EXTRA_TEXT, "This is tesing");

    startActivity(Intent.createChooser(i, "Share via"));

从此我可以在任何社交媒体平台上分享文字。

但我想用这个分享图像,我的图像是二进制形式。

InputStream input = new java.net.URL(
                                product.getString("url")).openStream();

 // Decode Bitmap
bitmap = BitmapFactory.decodeStream(input);

所以图像共享我写了下面的代码:

i.putExtra(android.content.Intent.EXTRA_TEXT, bitmap);

但它不起作用。它共享文本,如: - android.graphics.Bitmap@43394c40

那么我怎样才能与此分享图像呢?

3 个答案:

答案 0 :(得分:4)

  1. 首先,您必须下载该图像并保存在ExternalStorage中。 Check this link
  2. 社交应用不支持共享图片和文字。
  3. 请使用以下示例代码:

               <px:PXFormView ID="form" runat="server" DataSourceID="ds" Style="z-index: 100" Width="100%" DataMember="Filter" TabIndex="6500">
                    <Template>
                        <px:PXLayoutRule ID="PXLayoutRule1" runat="server" StartRow="True" ControlSize="M" LabelsWidth="XS" />
                        <px:PXTextEdit ID="edFilterParam" runat="server" DataField="FilterParam" CommitChanges="True">
                            <AutoCallBack Command="Action" Target="ds" />
                        </px:PXTextEdit>
                    </Template>
                    <AutoSize Container="Parent" Enabled="True" />
                </px:PXFormView>
    
    
                <px:PXSmartPanel runat="server" AllowMove="False" AllowResize="False" ID="ExternalWebsitePanel" RenderVisible="True"
                    RenderIFrame="True" AutoSize-Enabled="true" SkinID="Frame" LoadOnDemand="True" InnerPageUrl="http://testsite.com/" Position="Original">
                </px:PXSmartPanel>
    
  4. 支持APP:

    1. 谷歌+

    2. 环聊

    3. 的Gmail
    4. 电子邮件
    5. WHATSAPP
    6. 不支持APP:

      1. 的Skype
      2. 远足

答案 1 :(得分:1)

intent.putExtra(Intent.EXTRA_STREAM, Uri.parse( "file://"+filelocation));

对Android设备进行编程,避免使用地图的位图。将位图加载到内存时,使用RAM是小型设备上的关键资源。

。尽可能经常使用 Uri

修改

您可以将图像和文字一起发送,例如通过电子邮件。你把所有东西都放入Intent的想法是正确的。唯一的错误是处理位图而不是处理比特流。在发送图片之前,您必须先将其保存在设备的存储空间中。如果您不先保存它,您将比预期更快地实现缓冲区溢出。

答案 2 :(得分:1)

你必须首先将url中的位图保存到磁盘中,然后使用该文件传递意图。

    File file = writebitmaptofilefirst("the_new_image","http://www.theimagesource.com/blahblahblah.jpg");
    Uri uri = Uri.fromFile(file);

    shareIntent.putExtra(Intent.EXTRA_STREAM, uri);

添加此方法

public static File writebitmaptofilefirst(String filename, String source) {
    String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
    File mFolder = new File(extStorageDirectory + "/temp_images");
    if (!mFolder.exists()) {
        mFolder.mkdir();
    }
    OutputStream outStream = null;


    File file = new File(mFolder.getAbsolutePath(), filename + ".png");
    if (file.exists()) {
        file.delete();
        file = new File(extStorageDirectory, filename + ".png");
        Log.e("file exist", "" + file + ",Bitmap= " + filename);
    }
    try {
        URL url = new URL(source);
        Bitmap bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream());

        outStream = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
        outStream.flush();
        outStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    Log.e("file", "" + file);
    return file;

}