背景:我从《The Busy Coder's Guide to Android Development》这本书中看到了这一点 源码位置:https://github.com/commonsguy/cw-omnibus/tree/master/Internet/Download
我正在尝试构建一个函数来执行后台下载,这个示例似乎显示了我需要学习的内容。但是,刚开始下载,我就收到以下错误:
02-19 23:09:28.572 1563-1563/com.commonsware.android.downmgr E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.commonsware.android.downmgr, PID: 1563
android.os.StrictMode$StrictModeViolation: policy=79 violation=1
at android.os.StrictMode.executeDeathPenalty(StrictMode.java:1379)
at android.os.StrictMode.access$1300(StrictMode.java:118)
at android.os.StrictMode$AndroidBlockGuardPolicy.handleViolation(StrictMode.java:1372)
at android.os.StrictMode$AndroidBlockGuardPolicy.handleViolationWithTimingAttempt(StrictMode.java:1199)
at android.os.StrictMode$AndroidBlockGuardPolicy.startHandlingViolationException(StrictMode.java:1169)
at android.os.StrictMode$AndroidBlockGuardPolicy.onWriteToDisk(StrictMode.java:1112)
at libcore.io.BlockGuardOs.mkdir(BlockGuardOs.java:172)
at java.io.File.mkdirErrno(File.java:874)
at java.io.File.mkdirs(File.java:898)
at java.io.File.mkdirs(File.java:892)
at com.commonsware.android.downmgr.DownloadFragment.startDownload(DownloadFragment.java:94)
list 设置为具有
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
它轰炸出来的行是
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).mkdirs();
如果我删除该行,它轰炸的下一行是
req.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE) .setAllowedOverRoaming(假) .setTitle("演示") .setDescription(“有用的东西。不,真的。”) .setDestinationInExternalPublicDir(环境.DIRECTORY_DOWNLOADS, “测试.mp4”);
这是我试图让下载工作的代码
Uri uri=Uri.parse("http://commonsware.com/misc/test.mp4");
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
.mkdirs();
DownloadManager.Request req=new DownloadManager.Request(uri);
req.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI
| DownloadManager.Request.NETWORK_MOBILE)
.setAllowedOverRoaming(false)
.setTitle("Demo")
.setDescription("Something useful. No, really.")
.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,
"test.mp4");
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork()
.penaltyLog()
.penaltyDeath()
.build());
lastDownload=mgr.enqueue(req);
v.setEnabled(false);
query.setEnabled(true);
请让我知道该政策+违规意味着什么
最佳答案
磁盘写/读操作可能很长,理论上可能会导致 ANR 错误。 StrictMode 检测此类操作并抛出异常。您指定在 StrictMode.ThreadPolicy.Builder 中观察它:
.detectDiskReads() .detectDiskWrites()
要消除此异常,您可以在另一个线程中执行磁盘操作或关闭 StrictMode。
关于android - 尝试将文件下载到目录,android 给出 StrictModeViolation : policy=79 violation=1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28622146/