Android ACTION_SEND,带有特殊的unicode字符

时间:2017-05-30 06:07:12

标签: java android unicode

我正在尝试使用意图发送文本。我认为这是直截了当的:

public Intent getIntent() {
    final Intent intent = new Intent();
    intent.setComponent(new ComponentName(packageName, ri.activityInfo.name));
    intent.setAction(Intent.ACTION_SEND);
    intent.setType("text/plain"); 
    intent.putExtra(Intent.EXTRA_TEXT, getText());
    return intent;
}

private String getText(){
    // the emoji can be one of many. I removed all that for brevity 
    final int unicode = 0x1F3C5;
    final String emoji = String.valueOf(Character.toChars(unicode));
    // final String emoji = "\n1F3C5"; //didn't work either
    // I also tried using HTML here but I think I have some wires crossed, so I am not ruling that out yet
    return textPartOne + " " + emoji + " " + textPartTwo;
}

如您所见,EXTRA_TEXT中有一个特殊字符(表情符号)。当文本从设备A发送时,表情符号就像我期望的那样出现在消息中。但是在设备B(接收者)上,文本显示了一些疯狂(通常在两个不同的消息中)

  

@。£¡¡¡¡ | < | | | \< | [¡[¡

     

3 H£(U @æ@一个@¤¥¡

     

¡9 @ü@胡@Θ@ = @ø¥P

     

¡6 @Ö@Δì¿| |

如果我将设备A的消息发送到设备BBA,则无关紧要。我得到了相同的结果,所以我认为表情符号不受支持不是问题。

现在,如果我删除除表情符号代码之外的所有代码:

  

XAX&安培;

如果我完全删除表情符号代码,它就像一个魅力。

但是客户有那些表情符号......

其他一些可能值得注意的事项:

  • 我正在使用this to manage what intents我正在向用户展示。他们可以选择彩信,电子邮件,Twitter,Facebook或其他任何东西。我需要支持所有这些

  • 我收到了special characters from Emojipedia

  • 我没有在应用中的任何位置显示表情符号。它们将显示在短信,电子邮件或Facebook / Twitter Feed中。

  • 此应用程序的iOS版本已成功执行此操作。

have尝试了nearly dozenways no enter image description here。  有没有人可以对如何正确发送特殊字符有一些见解?

编辑:

正如你所看到的,我正在发送我想要的表情符号。但结果远非我的预期。这是模拟器向自身发送文本的屏幕截图。 mProLog

以下是我尝试过的部分

    String attempt1 = "--";
    try {
        attempt1 = Html.fromHtml(new String("&#x1F3C5".getBytes("UTF-8"))).toString();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    final int codePoint = 0x26F7;
    final String attempt2 = new String(new int[]{codePoint}, 0, 1);

    final String attempt3 = new String(Character.toChars(codePoint));
    final String attempt4 = "\u26F7";

所有结果都是:

  

& n

如果我在这些文章中添加文字:

final String attempt4 = "COME ON: \u26F7";

我明白了:

  

@Σ£(ù@æ@ s @@£Å¡7@ X£¿ù¿

总体意义 他讽刺地说

1 个答案:

答案 0 :(得分:-1)

您可以使用意图,即在活动之间发送的消息。在intent中,您可以放置​​所有类型的数据,String,int等。

在您的情况下,在activity2中,在转到activity1之前,您将以这种方式存储String消息:

Intent intent = new Intent(activity2.this, activity1.class);
intent.putExtra("message", getText());
startActivity(intent);

在activity1中,在onCreate()中,您可以通过检索Bundle(包含调用活动发送的所有消息)来获取String消息,并在其上调用getString():

Bundle bundle = getIntent().getExtras();
String message = bundle.getString("message");

然后您可以在TextView中设置文本:

TextView txtView = (TextView) findViewById(R.id.your_resource_textview);    
txtView.setText(message);

希望这有帮助!