android - 尝试将文件下载到目录,android 给出 StrictModeViolation : policy=79 violation=1

标签 android

背景:我从《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/

相关文章:

android - 在 Android Studio 中生成 Google App Engine 后端的问题

android - 为什么我的 Android Kotlin 应用程序不请求用户的许可来打开位置?

android - 如何修复 java.lang.NoClassDefFoundError : Failed resolution of: Lcom/google/android/gms/common/R$string in android studio 3. 6.1?

java - 点击 Android 屏幕解决媒体跳过问题,如何解决?

java - 无法在 android studio 中启动 android 模拟器

java - 如何在 Android 中格式化日期时间

android - 如何在 android 中录制 FM 音频?

android - 加入两个表并获取 Cursorloader 的游标

java - Google map 在我的 Android 应用程序中显示空白页?

android - 尝试创建视频缩略图时内存不足