android - DownloadManager.Request.setNotificationVisibility 失败并出现 jSecurityException : invalid value for visibility: 1

标签 android download-manager

我正在尝试使用 DownloadManager 从我的应用程序下载大型 PDF 文件。我希望在下载期间以及下载完成时显示通知。但是,设置可见性会导致上述异常。

这个错误与这篇文章不同DownloadManager.Request.setNotificationVisibility fails with jSecurityException: invalid value for visibility: 2

另一篇文章在将可见性设置为 VISIBILITY_HIDDEN 时寻求帮助,您需要在 list 中获得许可。我正在尝试将可见性设置为 DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED,如下所示:

public class DMnotifyTestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    DownloadManager mgr = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
    long downloadID = mgr
        .enqueue(new DownloadManager.Request(Uri.parse("http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf"))
            .setNotificationVisibility(
                    DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
            .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "hello.pdf")
            .setDescription("my.test.pack Doc"));
}

导致此堆栈跟踪的结果:

E/AndroidRuntime(24794): Caused by: java.lang.SecurityException: Invalid value for visibility: 1
E/AndroidRuntime(24794):    at android.os.Parcel.readException(Parcel.java:1321)
E/AndroidRuntime(24794):    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:182)
E/AndroidRuntime(24794):    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:136)
E/AndroidRuntime(24794):    at android.content.ContentProviderProxy.insert(ContentProviderNative.java:447)
E/AndroidRuntime(24794):    at android.content.ContentResolver.insert(ContentResolver.java:721)
E/AndroidRuntime(24794):    at android.app.DownloadManager.enqueue(DownloadManager.java:877)
E/AndroidRuntime(24794):    at my.test.pack.DMnotifyTestActivity.onCreate(DMnotifyTestActivity.java:18)

在不设置可见性的情况下,代码可以正常工作。我已经尝试向 list 添加各种权限,但仍然没有成功。这是针对 11 级,所以 hive 及以上。我尝试过的权限是:

  • android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
  • android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS
  • android.permission.ACCESS_DOWNLOAD_MANAGER
  • android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED

最佳答案

这是我在 Honeycomb 平板电脑(版本:3.2 或 API 级别:13)中克服此错误的技巧:

Request req = new Request(Uri.parse(url));
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.HONEYCOMB_MR2)
{
    req.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
else
{
    req.setNotificationVisibility(Request.VISIBILITY_VISIBLE);
}

啊...Android 的乐趣!

关于android - DownloadManager.Request.setNotificationVisibility 失败并出现 jSecurityException : invalid value for visibility: 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9933270/

相关文章:

android - DownloadManager.ACTION_DOWNLOAD_COMPLETE 广播接收器在 Android 中多次接收相同的下载 ID,但下载状态不同

ios - 核心数据 + AFNetworking + UI 更新(响应性)

Android - 语音识别

android - 如何在不为 iOS 编译任何内容的情况下使用 Xamarin?

android - 在 Android 中共享 DefaultHttpClient。同步还是不同步?

android - DownloadManager VS 自己的下载实现?

Android 下载管理器 ETag 支持

python - 无法使用python套接字编程下载文件

Android systrace 或 atrace python parser 解析结果

android - 正在运行的应用程序 : No such file or directory