从uri获取文件名和路径以获取文本文件

时间:2013-11-24 04:19:57

标签: android uri text-files absolute-path

我有一个应用程序,应该能够从电子邮件中打开和读取文本文件。 我将清单改为以下

<activity 
android:name="FileLoaderActivity"
    android:label="@string/fileloader_title"
    android:parentActivityName="MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"/>
    </intent-filter>
</activity>

在我的FileLoaderActivity中,我在onCreate方法中有以下内容:

// Get the intent that started this activity
Intent intent = getIntent();
Uri data = intent.getData();

//Verify that the type is text file
if (intent.getType().equals("text/plain")) {
    String path = data.getPath();
    File file = new File(path);
    Toast.makeText(getApplicationContext(), path,Toast.LENGTH_SHORT).show();
    if( file.exists())
        Toast.makeText(getApplicationContext(), "I exist",Toast.LENGTH_SHORT).show();
}

现在输出如下:

  

/my_email@gmail.com/messages/78/attachments/0.1/BEST/false

并且“我存在”永远不会出现。因此,这当然不会打开文件 我已经阅读了很多其他解决方案,但它们似乎是特定于媒体的。 你能帮我看一下文件的实际路径吗,

非常感谢您提前

1 个答案:

答案 0 :(得分:1)

好的,你可以使用

public String getRealPathFromURI(Uri contentUri) {
    String[] proj = { MediaStore.Images.Media.DATA };
    @SuppressWarnings("deprecation")
    Cursor cursor = managedQuery(contentUri, proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

这不仅适用于图像或媒体文件。当然,你必须首先下载文件,然后进入你的下载文件夹打开它。此外,如果您尝试加载文件,请确保编辑您的清单以获得正确的权限,如下所示:

<manifest> 
...
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</manifest>

希望这可以帮助任何寻找答案的人