1

在我的应用程序中,我在drawable文件夹中有一些可以在edittext和textviews中显示的小png图像。android:代表文本中的可绘制图像发送

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

我有以下情况: 在用户1,他可以选择图像并将其显示在edittext中。点击发送按钮后,edittext中的文本需要发送到User2。

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

那么,我该如何以文本格式表示图像。 我应该使用什么编码?我是否应该只有一些特殊字符的前缀可绘制的图像文件名?

例如:如果映像名称为E205,则可以像下面这样做: “这是正常的文本,## E205以前是形象”

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

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

+0

首先,您可以将图像上传到服务器,并使用图像url发送推送通知。 –

+0

GCM在文本字符串中有一些限制。您可以使用GCM仅通知其他用户,通过服务器可以获得一些新的更新,然后您可以从服务器获取。 –

+0

@BhavdipPathar这两个用户都在他们的可绘制文件夹中有图像,所以不需要上传到服务器 – user5155835

回答

0

您可以使用此如下解释: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或发。

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

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

您应该定义一个分隔符,这将有助于该字符串分割成图像/文本

像这样的东西可以成为你的字符串“IMAGENAME | USERTEXT”,只要确保你不使用,可以在使用的任何字符用户输入的文字。

然后,在另一侧上,可以用

split("|") 

拆分它在这种情况下,它将在位置返回大小2,IMAGENAME的字符串阵列上位置0,USERTEXT 1.

希望这可以帮助。

+0

我应该只是有一些特殊字符的前缀可绘制的图像文件名? – user5155835

+0

是的,你应该附上一些永远不会使用的角色 – Nanoc

+0

喜欢?请你能建议吗?另外,我已经更新了 – user5155835

0

您可以简单地转换/构建消息json并使用此json字符串来传递GCM。例如见下面由user1发送给用户的消息应该看起来。

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

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

让我知道你是否需要更多信息。

谢谢。