android: 在文本中表示可绘制图像以供发送

android: representing drawable images in text for sending

在我的应用程序中,我在 drawable 文件夹中有一些小的 png 图像,可以在 edittext 和 textviews 中显示。

现在,我可以在 edittext 和 textview 中显示这些图像。

我有以下情况: 在 User1,他可以 select 图像并将其显示在编辑文本中。单击发送按钮时,需要将 edittext 中的文本发送给 User2。

我正在使用 GCM 在用户之间发送普通文本。

那么,我怎样才能以文本格式表示图像。 我应该使用什么编码?我应该只在可绘制图像文件名前加上一些特殊字符吗?

例如:如果图片名称是e205,那么可以做类似下面的事情: "This is normal text, ##e205 previous is image"

就像我在这种情况下使用##,可以用来识别后面的单词实际上是图像文件名而不是普通文本吗?

当 User2 收到此消息时,只有文本的编码部分应转换回图像,并显示在文本视图中。

您可以按照此处的说明使用它:Drawable to byte[]

Drawable d; // the drawable (Captain Obvious, to the rescue!!!)
Bitmap bitmap = ((BitmapDrawable)d).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] bitmapdata = stream.toByteArray();

完成后,您可以将其设为字符串:

new String(bitmapdata);

然后你可以通过套接字、gcm 或任何你想要的方式发送它。

由您制定协议,以便应用可以区分编码图像和文本。

如果两个客户端在本地存储中都有可绘制对象,您只需告诉他们可绘制对象的名称,以便他们能够加载和显示它。

您应该定义一个有助于将字符串拆分为图像/文本的分隔符

类似这样的内容可以是您的字符串 "IMAGENAME|USERTEXT",只要确保您不使用任何可以在用户输入的文本中使用的字符即可。

然后,在另一边,你可以用

拆分它
split("|")

在这种情况下,它将 return 一个大小为 2 的字符串数组,IMAGENAME 在位置 0,USERTEXT 在位置 1。

希望对您有所帮助。

您可以简单地 convert/build 消息 json 并使用此 json 字符串传递 GCM。例如,请看下面由 user1 发送给用户的消息应该是这样的。

{
  "message": {
    "id": 12345,
    "from_name": "John",
    "to_name": "Steave,
    "body": "\"Hello\"",
    "image_id": "\"1.png\""
  }
}

现在在user2的身边。当 user2 收到消息 [GCM] 时,您将获得上面的 json 字符串。将 json 字符串转换为对象或简单地解析它。提取你想要的内容。例如在你的情况下 image_id。匹配本地目录或资产中的图像 ID,并将其用于 user2 的显示。

如果您需要更多信息,请告诉我。

谢谢。