gpt4 book ai didi

android - 通过蓝牙共享文本/纯字符串将数据转换为 HTML

转载 作者:搜寻专家 更新时间:2023-11-01 07:54:35 24 4
gpt4 key购买 nike

我试图通过蓝牙发送纯文本,但它在某处被转换为 HTML。

我使用的代码基本上是这样的:

String content = "This is just a test";
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, content);
sendIntent.setType("text/plain");
String title = "Share with…";
startActivity(Intent.createChooser(sendIntent, title));

当我运行这段代码并选择蓝牙选项时,文件被推送到远程系统,名称为“bluetooth_content_share.html”,内容如下:

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/></head><body>This is just a test</body></html>

我尝试在添加 EXTRA_TEXT 之前调用 setType,但症状没有变化。其他共享操作(例如“添加到 Dropbox”)以纯文本形式获取数据。而且我已经能够使用其他应用程序(例如“ES 文件资源管理器”)通过蓝牙成功发送纯文本文件。

如何才能像我要求的那样以纯文本形式发送数据?

最佳答案

我睡不着所以我决定看一下stackoverflow,看看android标签中有没有什么有趣的东西。这个问题看起来很简单,但事实证明它非常有趣,因为正如您在问题中指出的那样,它只是创建了一个以字符串作为内容的该死的 html 文件。

我假设蓝牙通信想要处理文件,Android 会推断我们的文本是 html,即使您清楚地说明了纯文本。

我提出的解决方案基本上是强制应用共享文本文件,而不是共享测试String。我也已经能够测试这个和你的代码,并且我能够复制 html 文件的神奇创建。这应该对您有所帮助。

更新由于 op 担心将文件留在存储中,并且无法使用临时文件,我更新了代码以将 FileObserver 添加到文件中,这使我们可以监视何时文件正在被修改以及它正在经历什么类型的操作。在这种情况下,我们需要监控的只是 FileObserver.CLOSE_NOWRITE 操作,该操作仅在访问文件以发送它时以及之后完成工作时触发在上面。删除后面的文件。

try {
//Create a file and write the String to it
BufferedWriter out;
final String filePath = Environment.getExternalStorageDirectory().getPath() + "/wadus.txt";
FileWriter fileWriter = new FileWriter(filePath);
out = new BufferedWriter(fileWriter);
out.write("I know you'll love me for finding the solution");
out.close();

//Access the file and share it through the original intent
File file = new File(filePath);
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
sendIntent.setType("text/plain");
String title = "Share with…";

//Create a file observer to monitor the access to the file
FileObserver fobsv = new FileObserver(filePath) {
@Override
public void onEvent(int event, String path) {
if (event == FileObserver.CLOSE_NOWRITE) {
//The file was previously written to, now it's been sent and closed
//we can safely delete it.
File file = new File(filePath);
file.delete();
}
}
};
fobsv.startWatching();

//Launch sharing intent
startActivity(Intent.createChooser(sendIntent, title));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

如果有人想知道为什么我们要在代码下方设置 FileObserver,是为了避免它在文件本身的创建和编辑时被触发。由于我们是在文件写入后添加的,因此我们只会触发通过蓝牙发送文件所需的事件(在本例中)。

关于android - 通过蓝牙共享文本/纯字符串将数据转换为 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29907030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com