Android:file.exists在下载和存储文件时总是返回false



我写了一个简单的代码,将文件下载到特定的目录中,如果它不存在的话。这是我的代码,它在某些设备中可以正常工作,而在其他设备中却不能正常工作(我知道这似乎很荒谬):

try {
        File direct = new File(Environment.getExternalStorageDirectory().toString() + "/abredanesh/library");
        boolean result = false;
        if(!direct.exists())
            result = direct.mkdirs();
        File myfile = new File(Environment.getExternalStorageDirectory() + "/abredanesh/library","/a.pdf");
        if (!myfile.getAbsoluteFile().exists()) {
            DownloadManager mgr = (DownloadManager) this.getSystemService(Context.DOWNLOAD_SERVICE);
            Uri downloadUri = Uri.parse(url);
            DownloadManager.Request request = new DownloadManager.Request(downloadUri);
            request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI
                    | DownloadManager.Request.NETWORK_MOBILE);
            request.setAllowedOverRoaming(false).setTitle("ابر دانش");
            request.setDescription("دانلود کتاب");
            request.setDestinationInExternalPublicDir("abredanesh/library/", "a.pdf");
            mgr.enqueue(request);
        }
    } catch (Exception e) {
        Log.e("PARSE_ERROR", e.toString());
        e.printStackTrace();
    }

这是我的许可列表:

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
<uses-permission android:name="android.permission.ACCESS_ALL_DOWNLOADS" />
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED" />
<!-- This app has permission to register and receive data message. -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!-- This app has permission to register and receive data message. -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.ghaleh.football.permission.C2D_MESSAGE" />
<!-- permission if the application needs to keep the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />

我的目标安卓版本是23。此代码在三星J2的安卓5.1和华为的安卓4.4中运行良好。在HTC的愿望与android 4.2它下载文件每次beacausemyfile.getAbsoluteFile().exists()返回false。(myfile.exists()和myfile.canread())。在Nexus 5与安卓6它显示了创建文件夹和下载它的权限错误。

三星和HTC都有外置存储器,华为和Nexus没有。此代码在三星的内部内存中创建文件夹和文件,并在HTC中使用外部文件夹和文件!

我的代码出了什么问题?我需要其他权限吗?为什么这些设备都不能像下一个一样工作!!!我看过很多关于file.exist的页面和问题,但没有一个答案在我的所有设备中都有效。

==============================================

编辑:

按照@draksia的建议,我试着打开了这个文件。我用这个代码打开文件:

            Intent target = new Intent(Intent.ACTION_VIEW);
        target.setDataAndType(Uri.fromFile(myfile), "application/pdf");
        target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
        Intent intent = Intent.createChooser(target, "Open File");
        try {
            startActivity(intent);
        } catch (ActivityNotFoundException e) {
            // Instruct the user to install a PDF reader here, or something
        }

三星和华盛打开了文件,但HTC给出了这个错误"这个文档无法打开。"(我有一些应用程序可以在HTC上打开pdf)

使用以下代码检查不同版本的文件路径。

getBaseContext().getFilesDir();

在4.0版本中,路径为

"/data/data.com/androidexample.ssplashscreen/files".

在6.0版本中,路径为

"/data/user/0.com/androidexample.ssplashscreen/files".

问题解决了!

正如我在问题中所说,HTC和三星都有外部存储器,但HTC使用SD卡存储文件,三星使用内部存储器。

我想这可能是我的设备出了问题。我重启HTC几次,但什么都没发生。然后我从HTC移除SD卡。我震惊了一切,使用内部记忆工作得很好!!!然后我再次放回SD卡(我应该关闭弹出或放SD卡),它又工作了!!!现在它有两个内存,但它使用内部内存来存储文件。

我真的对这个存储系统感到困惑。

最新更新