我正在使用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
,如何解决此问题。
答案 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());
}
}