2011-11-04 3 views
1

J'essaie d'utiliser webview pour télécharger une pièce jointe dans mon application. Je suis la procédure que l'application de navigateur par défaut suit comme suit: 1) Ecrire MyWebViewClient qui implémente DownloadListener et redéfinir onDownloadStart. appelle WebView exemple en passant setDownloadListener de MyWebViewClient 2) Pour télécharger, je crée instance de contentValues, Fillit avec des valeurs comme suit:Télécharger le fichier en utilisant le fournisseur de téléchargements Android

ContentValues values = new ContentValues(); 
    values.put("uri", webAddress.toString()); 
    values.put("cookiedata", cookies); 
    values.put("useragent", userAgent); 
    values.put("notificationpackage", 
      getPackageName()); 
    values.put("notificationclass", 
      DownloadReceiver.class.getCanonicalName()); 

    values.put("visibility", 0); 
    values.put("mimetype", mimetype); 
    values.put("hint", filename); 
    values.put("description", webAddress.mHost); 
    values.put("is_public_api", Boolean.TRUE); 
    values.put("destination", 4); 
    if (contentLength > 0) { 
     values.put("total_bytes", contentLength); 
    }   

    final Uri contentUri = 
      getContentResolver().insert(Uri.parse("content://downloads/my_downloads"), values); 

Notez que je ne peux pas importer android.provider.Downloads, donc je dois fournir valeurs de chaîne réelles de Downloads.java comme ci-dessus. D'une manière ou d'une autre, le téléchargement ne fonctionne pas avec ce code. En outre, j'ai dû mettre la valeur pour "is_public_api" et également définir "destination" comme le programme passe par la fonction checkInsertPermissions de DownloadProvider.java qui utilise enforceAllowedValues ​​pour vérifier ces valeurs. Je ne peux pas mettre la destination à la carte SD externe où je voudrais télécharger. Je vois que le navigateur Android par défaut ne définit pas les valeurs pour "is_public_api" et "destination" (voir BrowserActivity.java). Comment cela fonctionne-t-il pour le navigateur par défaut? Si je ne mets pas de valeur pour ces valeurs, alors je reçois une exception de sécurité.

J'ai configuré l'autorisation "android.permission.ACCESS_DOWNLOAD_MANAGER" dans mon manifeste.

Répondre

0

Avez-vous également les autorisations pour l'écriture sur la carte SD définie dans votre manifeste?

+0

Oui, j'ai configuré la permission d'écrire sur la carte SD. user802467

Questions connexes