Unity Android上传文件

因为之前在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());
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值