复制文件Android时发生TransactionTooLargeException

时间:2015-12-12 15:36:44

标签: java android copy-paste

我的目标是浏览文件并将其复制,然后将其粘贴到其他文件夹中。

要浏览我使用Intent的文件,如下所示

       Intent intent = new Intent();
       intent.addCategory(Intent.CATEGORY_OPENABLE);
       intent.setType("*/*");
       intent.setAction(Intent.ACTION_GET_CONTENT);
       startActivityForResult(Intent.createChooser(intent, "DEMO"), 1001);

       public void onActivityResult(int requestCode, int resultCode, Intent data){
           super.onActivityResult(requestCode, resultCode, data);
           if (requestCode == 1001) {
               Uri currFile = data.getData();
            }
        }

现在我想要复制文件,我必须从URI获取文件真实路径。 (我将文件实际路径传递给java FileInputStream)

要将Uri转换为我所做的实际路径,如下所示

   public static String getPath(Context cx,Uri uri) {

    String filePath = "";

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ){

        String wholeid = DocumentsContract.getDocumentId(uri);
        String id = wholeid.split(":")[1];
        String[] column = {MediaStore.Images.Media.DATA};
        String sel = MediaStore.Images.Media._ID + "=?";
        Cursor cursor = cx.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column, sel, new String[]{id}, null);

        int columnIndex = cursor.getColumnIndex(column[0]);
        if (cursor.moveToFirst()) {
            filePath = cursor.getString(columnIndex);
        }
        cursor.close();
    }else{
        String[] proj = {MediaStore.Images.Media.DATA};
        Cursor cursor = cx.getContentResolver().query(uri, null, null, null, null);
        if (cursor == null) {
            return uri.getPath();
        } else {
            cursor.moveToFirst();
            int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
            filePath = cursor.getString(idx);
        }

    }
    return  filePath;
}

如果文件超过10kb,则提供TransactionTooLargeException。

我的问题是如何在不获取TransactionTooLargeException的情况下浏览和复制文件并粘贴到文件夹中。

有没有好方法可以做到这一点。

0 个答案:

没有答案