gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 15:43:38 36 4
gpt4 key购买 nike

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

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。此代码在 Samsung J2 with android 5.1 和 Huawei android 4.4 中运行良好。在 HTC desire with android 4.2 中,它会在每次因为 causemyfile.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)

最佳答案

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

getBaseContext().getFilesDir();

在4.0版本中路径为

"/data/data/com.androidexample.splashscreen/files".

在6.0版本中路径为

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

关于Android:file.exists 在某些设备上下载和存储文件时总是返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36456371/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com