嗨,我正在编写一个应用程序,当用户长按或选择一个文件(任何类型的文件,无论是否有扩展名)时,它应该出现在共享列表中,我的应用程序应该获取详细信息(我认为是URI),并能够将其转换为绝对路径。
例如,如果用户通过长按或选择启用共享选项来选择图像文件,我就可以显示我的应用程序。
当我将应用程序中的URI打印为toast时,它显示的路径类似"content://media...../24"这不是一条绝对的道路。
我经历了很多选择,但我还不清楚如何找到一条绝对的道路。我的应用程序应该支持4.0以后的版本。
需要关注1.能够在我的应用程序中收集输入,它应该将其转换为绝对路径(如文件资源管理器中所示)
-
若用户选择了一个文件夹,我应该能够达到和1一样的效果。
-
一旦我实现了这一点,我应该再次显示为列表条目。在选择条目时,它应该允许显示可用应用程序的列表,以便打开路径。
您可以像这样尝试
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
int RESULT_LOAD_IMAGE = 1;
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK
&& null != data) {
Uri selectedFile = data.getData();
String wholeID =DocumentsContract.getDocumentId(selectedFile);
// Split at colon, use second item in the array
String id = wholeID.split(":")[1];
String[] column = { MediaStore.Images.Media.DATA };
// where id is equal to
String sel = MediaStore.Images.Media._ID + "=?";
Cursor cursor = getContentResolver().
query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,column, sel, new String[]{ id }, null);
String filePath = "";
int columnIndex = cursor != null ? cursor.getColumnIndex(column[0]) : 0;
if (cursor != null && cursor.moveToFirst()) {
filePath = cursor.getString(columnIndex);
}
if (cursor != null) {
cursor.close();
}
File file = new File(filePath);
}