Android:file.exists在下载时总是返回false并且存储文件是某些设备

时间:2016-04-06 16:01:15

标签: android file

我编写了一个简单的代码,用于将文件下载到特定目录(如果该文件不存在)。这是我的代码,它在某些设备中正常工作,而在其他设备中则不然(我知道它看起来很荒谬):

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" />

我的目标Android版本是23.这个代码适用于三星J2与Android 5.1和华为与Android 4.4。 在使用android 4.2的HTC愿望中,每次下载beacausemyfile.getAbsoluteFile()。exists()都会返回false。 (myfile.exists()和myfile.canread())。 在带有android 6的Nexus 5中,它显示了创建文件夹并下载它的权限错误。

三星和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
        }

Samsung和Huasei打开文件但HTC出现此错误“此文档无法打开”。 (我有一些应用程序在HTC上打开pdf)

2 个答案:

答案 0 :(得分:3)

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

getBaseContext().getFilesDir();

在4.0版本中,路径为

  

“/数据/数据/ com.androidexample.splashscreen /文件”。

在6.0版本中,路径为

  

“/数据/用户/ 0 / com.androidexample.splashscreen /文件”。

答案 1 :(得分:1)

问题解决了!

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

我想也许这就是我的设备的问题。我重启HTC几次但没有发生任何事。然后我从HTC中删除了SDcard。我震惊的一切都很好用内存!!!然后我再次放回SDcard(我应该关闭以弹出或放入SD卡)然后再次工作!!!现在它有两个记忆,但它使用内部存储器来存储文件。

我真的很困惑这个存储系统。