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 的显示。
如果您需要更多信息,请告诉我。
谢谢。
在我的应用程序中,我在 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 的显示。
如果您需要更多信息,请告诉我。
谢谢。