DownloadManager.Request.setNotificationVisibility falla con jSecurityException: valor no válido para la visibilidad: 1

Estoy tratando de usar el DownloadManager para descargar archivos PDF de gran tamaño de mi aplicación. Quiero que se muestren las notificaciones durante la descarga, así como cuando finalice la descarga. Sin embargo establecer la visibilidad causa excepción anterior.

Este error es diferente de este post DownloadManager.Request.setNotificationVisibility falla con jSecurityException: valor no válido para la visibilidad: 2

El otro mensaje está pidiendo ayuda al establecer la visibilidad en VISIBILITY_HIDDEN para el que necesita permiso en el manifiesto. Estoy intentando fijar la visibilidad a DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED como así:

 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")); } 

}

Lo que resulta en este stacktrace:

 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) 

Sin establecer la visibilidad, el código funciona bien. Ya he intentado agregar varios permisos para el manifiesto, pero todavía no ir. Esta es la orientación nivel 11 para panal y hacia arriba. Permisos que he intentado son:

  • Android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
  • Android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS
  • Android.permission.ACCESS_DOWNLOAD_MANAGER
  • Android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED

Aquí está mi hack para superar este error en las tabletas Honeycomb (Versión: 3.2 o API Level: 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); } 

Ah … la diversión con Android!

Si desea utilizar 'VISIBILITY_HIDDEN', debe agregar este permiso en andoroidManifest.xml

 <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/> 

Acabo de enfrentar este error con una aplicación similar (mismo código para dm) a Marc's. Nunca lo encontré durante el desarrollo, y no tengo usuarios Honeycomb. Tengo un código similar al anterior pero para Gingerbread y superior.

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); } else { request.setShowRunningNotification(true); } 

El "hack" anterior está dirigido a Honeycomb, pero como no tengo usuarios Honeycomb, puedo confirmar que el bug está presente en> 4.0, que son + 80% de mis usuarios. El problema apareció en la consola de desarrollo y no puedo volver a crearlo con mis dispositivos. Actualizará mi respuesta a las condiciones del error cuando los usuarios comiencen a quejarse.

EDITAR:

Me encantan mis usuarios. Tenemos que probar el código con un usuario que tenía este problema. La aplicación se estrelló al iniciar la descarga (que creó la notificación VISIBILITY_VISIBLE_NOTIFY_COMPLETED). De hecho, estaba usando android 4.0.3.

Como arreglar

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE); } else { request.setShowRunningNotification(true); } 

Básicamente el mismo que la respuesta anterior, pero podemos confirmar que el problema está presente en api 15, por lo que sólo tiene que hacer el ajuste para afectar a todas las versiones api> 11, y no te preocupes por api 16 y 17 a sufrir el mismo problema

  • DownloadManager.Request.setNotificationVisibility falla con jSecurityException: valor no válido para la visibilidad: 2
  • Android DescargarManager Progreso
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.