我的目标是浏览文件并将其复制,然后将其粘贴到其他文件夹中。
要浏览我使用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的情况下浏览和复制文件并粘贴到文件夹中。
有没有好方法可以做到这一点。