【问题标题】:Android ACTION_SEND with special unicode characters带有特殊 unicode 字符的 Android ACTION_SEND
【发布时间】:2017-10-30 11:33:04
【问题描述】:

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

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(接收者)上,文本显示出一些疯狂(通常在两个不同的消息中)

@.£¡ù¿ ¡ |

@H£(ù@æ@a@¤¥¡

¡9@ü@Hù@Θ@=@ø¥p

¡6@Ö@Δì¿¡|

无论我将消息从设备A 发送到设备B 还是从B 发送到A 都没有关系。无论哪种方式,我都得到相同的结果,所以我相信表情符号不受支持不是问题。

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

Xäx&

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

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

????


其他一些可能需要注意的事项:

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

  • 我收到了special characters from Emojipedia

  • 我没有在应用程序的任何地方显示表情符号。它们将显示在短信、电子邮件或 Facebook/Twitter 提要中。

  • 这个应用程序的 iOS 变体已经成功地做到了这一点。

have 尝试了nearlydozen 不同的waysno 都有效。 有没有人可能对如何正确发送特殊字符有所了解?


编辑:

如您所见,我正在发送我想要的表情符号。但结果与我预期的相差甚远。这是模拟器向自身发送文本的屏幕截图。

这里是一些我尝试过的方法

    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£¿ù¿

这完全有道理他讽刺地说

【问题讨论】:

  • 勾选这个答案发送表情符号stackoverflow.com/a/27183457/8084578
  • 你在哪里显示这个表情符号?
  • @JaydeepPatel 不显示它们。它们将显示在短信、电子邮件或 Facebook/Twitter 提要中。
  • @JaydeepPatel 这与 TextViews 无关
  • 从这里尝试:emojipedia.org/…

标签: java android unicode


【解决方案1】:

您可以使用意图,即在活动之间发送的消息。在一个意图中,您可以放置​​各种数据、字符串、int 等。

在您的情况下,在活动 2 中,在转到活动 1 之前,您将以这种方式存储字符串消息:

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

在activity1中,在onCreate()中,你可以通过获取一个Bundle(包含调用activity发送的所有消息)来获取String消息,然后在它上面调用getString():

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

然后就可以在TextView中设置文字了:

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

希望这会有所帮助!

【讨论】:

  • 不,这不能解决我的特殊字符问题。
猜你喜欢
  • 1970-01-01
  • 2015-11-15
  • 2010-11-14
  • 2022-01-15
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 2021-08-05
相关资源
最近更新 更多