Android,在存储上查找已保存文件的问题

时间:2015-05-14 10:55:54

标签: android android-intent

我正在使用DownloadManager从服务器下载文件(PDF),请求

request.setDestinationInExternalFilesDir(this,Environment.getDataDirectory().getPath(), filename);

文件在

下的内部存储空间中保存
"MyFiles->All files/DeviceStorage/Android/data/myPackage/files/data/"

要打开保存的文件,请使用以下代码

File sdCardRoot = new File(Environment.getDataDirectory().getPath());
if(sdCardRoot.exists()){
    for (File f : sdCardRoot.listFiles()) {
        if (f.isFile())
            name1 = f.getName();

            String path = f.getPath();

            Log.e("UriFile", ""+Uri.parse(path));
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.parse(path), "application/pdf");
            intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            startActivity(intent);
        }

但它显示文档无法打开,但我可以在该位置看到该文件,并且可以直接打开它而不是从我的应用程序。

我插入了SD卡,并且在SD卡中也创建了类似的文件夹结构。

我想在打开文件时会搜索SDCARD上的文件夹,而不是我的internal storage,如何解决此问题。

2 个答案:

答案 0 :(得分:0)

您是否在AndroidManifest文件中添加了权限:

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

答案 1 :(得分:0)

由于您的文件存储在应用程序内部存储中,即 / data / data / packagename / ,请使用 getFilesDir()来获取保存应用程序文件的目录路径&amp;使用 listFiles()获取返回路径目录中的所有文件。

  

getFilesDir() - 返回文件系统上目录的绝对路径,其中存储使用openFileOutput(String,int)创建的文件。读取或写入返回的路径不需要任何权限,因为此路径是内部存储。

或者您可以使用 getExternalFilesDir(字符串类型)来获取保存应用文件的目录路径&amp;使用 listFiles()迭代文件。

  

getExternalFilesDir(String type) - 返回主外部文件系统(即Environment.getExternalStorageDirectory()上的某个目录)上的目录的绝对路径,其中应用程序可以放置它拥有的持久文件。这些文件是应用程序的内部文件,通常不会被用户视为媒体。

用法示例:

public void listFilesInAppInternalStorage(){

    //using getFilesDir()
    File filesDir = getFilesDir();
    File filesList[] = filesDir.listFiles();
    for(File file: filesList){
         Log.i(TAG, "FileName:" + file.getName());
    }

    //using getExternalFilesDir()
    File extFilesDir = getExternalFilesDir(null);   
    File listOfFiles[] = extFilesDir.listFiles();
    for (int i=0; i < listOfFiles.length; i++)
    {
        Log.v(TAG, "FileName:" + listOfFiles[i].getName());
        Log.d(TAG, "FilePath:" + listOfFiles[i].getAbsolutePath());
    }

}