因为之前在Android端选择文件后可以获取到路径,但是路径传给Unity后读取存在问题,所以直接在Android端读取文件,转成string传到Unity端,再在Unity端将strin转会byte[]。
public void OpenFile(String fileType)
{
openFilePicker(fileType);
}
private static final int REQUEST_CODE_OPEN_DOCUMENT = 1;
// 启动文件选择器
private void openFilePicker(String filetype) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType(filetype+"/*"); // 设置选择的文件类型,*/* 表示所有类型
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent, REQUEST_CODE_OPEN_DOCUMENT);
}
// 处理文件选择结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_OPEN_DOCUMENT)
{
if (resultCode == RESULT_OK)
{
// 获取文件的 URI
Uri fileUri = data.getData();
if (fileUri != null) {
readAudioFileAsString(fileUri);
return;
}
}
UnityPlayer.UnitySendMessage("UnityConnector", "ReadFileFail", "");
}
}
private void readAudioFileAsString(Uri fileUri) {
try {
// 获取输入流
InputStream inputStream = getContentResolver().openInputStream(fileUri);
// 使用 ByteArrayOutputStream 将字节流转换为 byte[]
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
// 读取输入流并写入 ByteArrayOutputStream
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
byteArrayOutputStream.write(buffer, 0, bytesRead);
}
// 将音频文件的字节数组转换为 Base64 编码的字符串
byte[] audioBytes = byteArrayOutputStream.toByteArray();
String encodedAudio = Base64.encodeToString(audioBytes, Base64.DEFAULT);
UnityPlayer.UnitySendMessage("UnityConnector", "ReadFileSuccess",encodedAudio);
// 关闭流
inputStream.close();
byteArrayOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
UnityPlayer.UnitySendMessage("UnityConnector", "ReadFileFail",e.toString());
}
}