Gérer les intentions de téléchargement dans mon application

Mon application de visionnement web gère déjà la multitude des URL externes (ouvre des liens à partir d'applications externes comme les navigateurs, les navigateurs, etc.) comme ceci ( j'ai obtenu ce code ici )

// get URL from browsable intent filter TextView uri = (TextView) findViewById(R.id.urlField); // get the url url = getIntent().getDataString(); Uri data = getIntent().getData(); if (data == null) { uri.setText(""); } else { uri.setText(getIntent().getData().toString()); fadeout(); } // } 

Dans mes paramètres de visionnage web

  • Comment puis-je supprimer un élément spécifique d'un JSONArray?
  • Modifier ImageView
  • Android-Connectez-vous via Google plus "Une erreur interne s'est produite"
  • Comment utiliser l'outil Monitor (DDMS) pour déboguer l'application
  • La connexion Twitter a échoué
  • Une application Android peut-elle contrôler une autre application via UI Automator?
  •  // Load URL from Browsable intent filter if there is a valid URL pasted if (uri.length() > 0) webView.loadUrl(url); else // dont load 

    C'est ainsi que je gère les téléchargements dans ma vision du Web

     // download manager webView.setDownloadListener(new DownloadListener() { @Override public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) { DownloadManager.Request request = new DownloadManager.Request( Uri.parse(url)); request.setMimeType(mimeType); String cookies = CookieManager.getInstance().getCookie(url); request.addRequestHeader("cookie", cookies); request.addRequestHeader("User-Agent", userAgent); request.setDescription("Downloading file..."); request.setTitle(URLUtil.guessFileName(url, contentDisposition, mimeType)); request.allowScanningByMediaScanner(); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); request.setDestinationInExternalPublicDir( Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName( url, contentDisposition, mimeType)); DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); dm.enqueue(request); Toast.makeText(getApplicationContext(), "Downloading File", Toast.LENGTH_LONG).show(); } }); // download manager 

    Cependant, j'aimerais gérer les intentions de téléchargement passées par d'autres applications aussi. Comment je fais ça?

    C'est ce que j'utilise pour ouvrir le sélecteur d'application par défaut du système à partir d'une autre application (mon application est répertoriée ici).

      // download via... webView.setDownloadListener(new DownloadListener() { public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); Toast.makeText(getApplicationContext(), "don't choose our app as it can't handle download intents, i have posted a question on stackoverflow though.", Toast.LENGTH_SHORT).show(); } }); // download via.. 

    Chaque fois que je clique sur un lien de téléchargement, mon application s'ouvre, mais elle reste juste au lieu d'ouvrir l'url. Je veux qu'il agisse comme une application de téléchargement

  • Affichage des fichiers Excel dans mon application Android
  • Comment supprimer tous les fichiers et dossiers dans un dossier sur Android
  • Débordement de l'empilement lors de la réinitialisation de rxjava concatWith
  • ShouldOverrideUrlLoading dans WebView pour Android ne fonctionne pas
  • Lien sur une page Web pour ouvrir l'application instagram
  • Codes d'erreur de démarrage de MediaRecorder
  • 2 Solutions collect form web for “Gérer les intentions de téléchargement dans mon application”

    Vous devez résoudre les problèmes à

    • (A) affiche toujours le choix
    • (B) indiquez à Android que votre application devrait faire partie du choix
    • (C) traiter le "téléchargement"

    (A) affiche toujours le choix

    remplacer

     startActivity(i); 

    avec

     startActivity(Intent.createChooser(i, "caption of the choser")); 

    (B) indiquez à Android que votre application devrait faire partie du choix

    Dans le manifeste, vous devez déclarer que vous avez une activité capable de gérer le contenu pertinent

     <manifest ... > <application ... > <activity android:name=".MyDownloadActivity" ...> <intent-filter > <action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.SEND" /> <action android:name="android.intent.action.SENDTO" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:mimeType="*/*" android:scheme="file" /> </intent-filter> <intent-filter > <!-- mime only SEND(_TO) --> <action android:name="android.intent.action.SEND" /> <action android:name="android.intent.action.SENDTO" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.CATEGORY_OPENABLE" /> <!-- these do not work :-( <data android:scheme="content" android:host="*" /> <data android:scheme="content" android:host="media" android:pathPattern="/external/images/media/.*" /> <data android:host="*" android:scheme="content" android:mimeType="image/*" /> --> <data android:mimeType="*/*" /> </intent-filter> </activity> </application> </manifest> 

    * (C) traiter le "téléchargement"

    MyDownloadActivity Votre MyDownloadActivity.onCreate() recevra tous les mime-types * / * pour SEND, SENDTO, VIEW. Pour plus de détails, voir la réponse de @Vickyexpert

    L'interception intentionnelle est un outil gratuit pour analyser les intentions. Il peut intercepter presque toutes les intentions. Vous pouvez regarder le code source pour voir comment cela se fait.

    J'utilise sendtosd comme mon gestionnaire de téléchargement à usage général. It-s sourcecoder est disponible sur github

    Vous devez mettre le code ci-dessous dans votre activité, qui répond à l'intention,

     void onCreate(Bundle savedInstanceState) { // Get intent, action and MIME type Intent intent = getIntent(); String action = intent.getAction(); String type = intent.getType(); if (Intent.ACTION_VIEW.equals(action)) { */if (type.startsWith("image/“)) {*/ downloadImage(intent); // Download image being sent } } void downloadImage(Intent intent) { Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); if (imageUri != null) { // Write Your Download Code Here } } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.