如何使用android发送视频附件

时间:2014-03-13 15:39:09

标签: android image video android-intent bytearray

我一直在努力解决这个问题。以下是最新的州。

我有一个应用程序,允许一个用户将附件发送给另一个用户。

这是解剖学:

要获取要发送的附件,请使用以下代码:

public void onGetAttachmentClicked(View view) {
        Intent attachment = new Intent(Intent.ACTION_GET_CONTENT);
        attachment.setType("*/*");
        startActivityForResult(Intent.createChooser(attachment, "Attachment"),
                ATTACHMENT_REQUEST_CODE);
    }

….

//inside onActivityResult
if (requestCode == ATTACHMENT_REQUEST_CODE) {
            mAttachmentUri = data.getData();
        }

….
//inside do in background, I convert uri to byte[] which I then send to the blobstore

问题

无论我使用哪种方法将uri转换为字节数组,我都会得到相同的错误日志

03-13 08:15:24.753: W/dalvikvm(9451): threadid=21: thread exiting with uncaught exception (group=0x40d9a2a0)
03-13 08:15:24.824: E/AndroidRuntime(9451): FATAL EXCEPTION: AsyncTask #4
03-13 08:15:24.824: E/AndroidRuntime(9451): java.lang.RuntimeException: An error occured while executing doInBackground()
03-13 08:15:24.824: E/AndroidRuntime(9451):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
03-13 08:15:24.824: E/AndroidRuntime(9451):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)

那里不多。所以我使用调试器来逐步完成,这就是我找到的。当我使用以下方法时,错误发生在经过一些迭代次数的while循环中

public static byte[] uriToByteArray(Uri uri, Context context) throws IOException {
    InputStream inputStream = context.getContentResolver().openInputStream(uri);
    // this dynamically extends to take the bytes you read
    ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();

    // this is storage overwritten on each iteration with bytes
    int bufferSize = 1024;
    byte[] buffer = new byte[bufferSize];

    // we need to know how may bytes were read to write them to the byteBuffer
    int len = 0;
    while ((len = inputStream.read(buffer)) != -1) {
        byteBuffer.write(buffer, 0, len);
    }
    // and then we can return your byte array.
    return byteBuffer.toByteArray();
}

如果我使用常见的apache,代码在转换过程中仍会失败,并且出现相同的错误

context.getContentResolver().openInputStream(uri);
byte[] attachmentBites = IOUtils.toByteArray(in);

注意:

如果附件是图像,一切正常 - 完全相同的代码。但如果附件是视频,那么我就会收到错误。此外,为了测试,我用手机的摄像机拍摄视频。

1 个答案:

答案 0 :(得分:0)

  

人们如何发送视频附件?

理想情况下,通过流式传输。从文件中读取并写入网络。它与您正在使用的代码类似,但是您可以从OutputStream或其他任何形式获得HttpURLConnection的其他形式。

  

错误跟踪就是你所看到的,我能做些什么来从跟踪中看到更多的错误?

通常会有第二节,列出“由...引起的”异常。如果你没有得到这个,我对这种行为没有很好的解释,但是如果它还没有那么你就无法获得它,除了可能你自己try / catch阻止doInBackground()中的内容。