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.
Oui, j'ai configuré la permission d'écrire sur la carte SD. –
user802467