Laz*_*nja 16 android android-file android-permissions
以下代码包括从服务器下载文件并将其保存在存储中,当设备具有内部存储时可以正常工作.
但是当我使用没有内部存储的设备尝试它时,只有外部存储器,我得到以下异常.
java.io.filenotfoundexception打开失败的eacces(权限被拒绝)
public void downloadFile(String dlUrl, String dlName) {
int count;
HttpURLConnection con = null;
InputStream is = null;
FileOutputStream fos = null;
try {
URL url = new URL( dlUrl );
con = (HttpURLConnection) url.openConnection();
con.setDoInput(true);
con.connect();
is = url.openStream();
String dir = Environment.getExternalStorageDirectory() + Util.DL_DIRECTORY;
File file = new File( dir );
if( !file.exists() ){
file.mkdir();
}
Util.LOG_W(TAG, "Downloading: " + dlName + " ...");
fos = new FileOutputStream(file + "/" + dlName);
byte data[] = new byte[1024];
while( (count = is.read(data)) != -1 ){
fos.write(data, 0, count);
}
Util.LOG_D(TAG, dlName + " Download Complete!");
} catch (Exception e) {
Util.LOG_E(TAG, "DOWNLOAD ERROR = " + e.toString() );
bServiceDownloading = false;
}
finally{
try {
if( is != null)
is.close();
if( fos != null)
fos.close();
if( con != null)
con.disconnect();
} catch (Exception e) {
Util.LOG_E(TAG, "CLOSE ERROR = " + e.toString() );
}
}
}
Run Code Online (Sandbox Code Playgroud)
在清单文件中,我有以下内容:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
任何建议可能是什么原因?顺便说一句,Environment.getExternalStorageDirectory()返回/ mnt/sdcard /和file.mkdir()返回false.
ank*_*ush 34
对于面向 Android 10 或更高版本的应用,此属性默认为“false”。
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
Run Code Online (Sandbox Code Playgroud)
Laz*_*nja 14
这个问题似乎是由几个因素造成的.
检查#1
首先在清单文件中添加此权限并检查它是否正常工作:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application>
...
</application>
Run Code Online (Sandbox Code Playgroud)
.....
检查#2:
如果您在模拟器上运行,请检查属性以查看它是否具有SD卡.
检查#3:
禁用从设备到计算机的文件传输.如果启用,则应用程序将无法访问SD卡.
检查#4:
如果仍然无法正常工作,请尝试以下操作:
String dir = Environment.getExternalStorageDirectory().getAbsolutePath()
Run Code Online (Sandbox Code Playgroud)
对我来说,以下工作:
问题是getExternalStorageDirectory返回/ mnt/sdcard而我需要外部存储的实际路径,即/ mnt/sdcard-ext,并且android中没有API可以获取可移动SD卡的绝对路径.
我的解决方案是对目录进行硬编码,如下所示:
String dir = "/mnt/sdcard-ext" ;
Run Code Online (Sandbox Code Playgroud)
由于该应用程序仅适用于一台设备,因此上述工作完成了.
如果遇到相同的问题,请使用文件资源管理器应用程序查找外部目录的名称并对其进行硬编码.
Nar*_*esh 10
使用READ_EXTERNAL_STORAGE权限从设备读取数据.
| 归档时间: |
|
| 查看次数: |
47470 次 |
| 最近记录: |