android EMOJI
2014-07-03 20:48
375 查看
概述
个人最近在做公司的android项目,里面要对EMOJI表情进行处理,由于ios产品已经上线,而我的android产品才刚刚开始,所以android需要兼容服务器端ios已经提交上去的EMOJI数据(后来者,比较坑呀,希望广大猿友们不要给后来者挖坑呀,做的时候最好考虑下另一个平台的兼容性,我是被坑死了~~)。
啥是emoji表情呢?小日本的东西呗,其实我对这个小日本的东西并不是很感冒,项目所需吗,没有办法撒~~附个所谓的emoji表情的官网吧(我也不知道是不是真的官网,看上去内容很全,又有日文,全当它是吧)在这里小小的吐槽下:这个官网也够坑的,虽说提供了emoji图片(这个省去了我很多时间),但是提供的图片有些就是黑白的,有些直接啥也没有,就一个黑色的背景,还有些和ios上的图片对不上,弄得我这个小小程序员,后面还的自己切图,扣背景!
哈哈~~回到正题上来吧,由于ios默认是支持emoji表情发送的,而android原生系统默认是不支持的,只有一些第三方厂商可能会加上去(一般都是黑白的,例如小米),或者第三方的输入法会加入emoji表情(例如:搜狗输入法),所以我在项目中要兼容ios的emoji表情就得从两方面出发:从服务器接收表情和发送表情至服务器。
初试
1,代码贴上
/**
* @desc <pre>表情解析,转成unicode字符</pre>
* @author Weiliang Hu
* @date 2013-12-17
* @param cs
* @param mContext
* @return
*/
public static String convertToMsg(CharSequence cs, Context mContext) {
SpannableStringBuilder ssb = new SpannableStringBuilder(cs);
ImageSpan[] spans = ssb.getSpans(0, cs.length(), ImageSpan.class);
for (int i = 0; i < spans.length; i++) {
ImageSpan span = spans[i];
String c = span.getSource();
int a = ssb.getSpanStart(span);
int b = ssb.getSpanEnd(span);
if (c.contains("[")) {
ssb.replace(a, b, convertUnicode(c));
}
}
ssb.clearSpans();
return ssb.toString();
}
private static String convertUnicode(String emo) {
emo = emo.substring(1, emo.length() - 1);
if (emo.length() < 6) {
return new String(Character.toChars(Integer.parseInt(emo, 16)));
}
String[] emos = emo.split("_");
char[] char0 = Character.toChars(Integer.parseInt(emos[0], 16));
char[] char1 = Character.toChars(Integer.parseInt(emos[1], 16));
char[] emoji = new char[char0.length + char1.length];
for (int i = 0; i < char0.length; i++) {
emoji[i] = char0[i];
}
for (int i = char0.length; i < emoji.length; i++) {
emoji[i] = char1[i - char0.length];
}
return new String(emoji);
}
做了个非常好的 demo 出来,大家可以下载看看。呵呵。
下载地址:http://download.csdn.net/detail/huang_liang_wei/7589255
个人最近在做公司的android项目,里面要对EMOJI表情进行处理,由于ios产品已经上线,而我的android产品才刚刚开始,所以android需要兼容服务器端ios已经提交上去的EMOJI数据(后来者,比较坑呀,希望广大猿友们不要给后来者挖坑呀,做的时候最好考虑下另一个平台的兼容性,我是被坑死了~~)。
啥是emoji表情呢?小日本的东西呗,其实我对这个小日本的东西并不是很感冒,项目所需吗,没有办法撒~~附个所谓的emoji表情的官网吧(我也不知道是不是真的官网,看上去内容很全,又有日文,全当它是吧)在这里小小的吐槽下:这个官网也够坑的,虽说提供了emoji图片(这个省去了我很多时间),但是提供的图片有些就是黑白的,有些直接啥也没有,就一个黑色的背景,还有些和ios上的图片对不上,弄得我这个小小程序员,后面还的自己切图,扣背景!
哈哈~~回到正题上来吧,由于ios默认是支持emoji表情发送的,而android原生系统默认是不支持的,只有一些第三方厂商可能会加上去(一般都是黑白的,例如小米),或者第三方的输入法会加入emoji表情(例如:搜狗输入法),所以我在项目中要兼容ios的emoji表情就得从两方面出发:从服务器接收表情和发送表情至服务器。
初试
1,代码贴上
/**
* @desc <pre>表情解析,转成unicode字符</pre>
* @author Weiliang Hu
* @date 2013-12-17
* @param cs
* @param mContext
* @return
*/
public static String convertToMsg(CharSequence cs, Context mContext) {
SpannableStringBuilder ssb = new SpannableStringBuilder(cs);
ImageSpan[] spans = ssb.getSpans(0, cs.length(), ImageSpan.class);
for (int i = 0; i < spans.length; i++) {
ImageSpan span = spans[i];
String c = span.getSource();
int a = ssb.getSpanStart(span);
int b = ssb.getSpanEnd(span);
if (c.contains("[")) {
ssb.replace(a, b, convertUnicode(c));
}
}
ssb.clearSpans();
return ssb.toString();
}
private static String convertUnicode(String emo) {
emo = emo.substring(1, emo.length() - 1);
if (emo.length() < 6) {
return new String(Character.toChars(Integer.parseInt(emo, 16)));
}
String[] emos = emo.split("_");
char[] char0 = Character.toChars(Integer.parseInt(emos[0], 16));
char[] char1 = Character.toChars(Integer.parseInt(emos[1], 16));
char[] emoji = new char[char0.length + char1.length];
for (int i = 0; i < char0.length; i++) {
emoji[i] = char0[i];
}
for (int i = char0.length; i < emoji.length; i++) {
emoji[i] = char1[i - char0.length];
}
return new String(emoji);
}
做了个非常好的 demo 出来,大家可以下载看看。呵呵。
下载地址:http://download.csdn.net/detail/huang_liang_wei/7589255
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- 解決Linux下Android开发真机调试设备不被识别问题
- [Android]在代码里运行另一个程序的方法
- Android多窗口的实现