Handle Download-Intents in meiner App

Meine Webview-App verarbeitet bereits externe URLs gut (öffnet Links von externen Apps wie Viber, Browser, etc.) wie diese – ( ich habe diesen Code von hier )

// 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(); } // } 

In meinen Webview-Einstellungen

 // Load URL from Browsable intent filter if there is a valid URL pasted if (uri.length() > 0) webView.loadUrl(url); else // dont load 

Dies ist, wie ich meine Downloads in meinem Webview behandle

 // 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 

Allerdings würde ich gerne diese Download-Intents auch von anderen Apps verabschiedet. Wie mache ich das?

Dies ist, was ich benutze, um die System-Standard-App-Auswahl von einer anderen App zu öffnen (meine App ist hier aufgeführt) –

  // 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.. 

Wann immer ich auf einen Download-Link klicke, öffnet sich meine App, aber sitzt nur noch anstatt die URL zu öffnen. Ich möchte, dass es wie eine Downloader-App fungiert

  • Benachrichtigung bringt App nach vorne ohne Veränderung Aktivität
  • Unterschied zwischen Kategorie Home und Category Launcher
  • Android zurück zum ersten bildschirm
  • Wie man eine Absicht behandelt, die keine Daten beim ersten Aufruf einer Aktivität hat?
  • Wie kann ich alle Aktivitäten beenden?
  • Anwendung anormales Verhalten startet nicht die in der Absicht erwähnte Aktivität
  • Intent chooser dialog zeigt den Paketnamen neben dem Activity Label an
  • Wie passiere ich ein Paket, das eine Liste von Objekten enthält?
  • 2 Solutions collect form web for “Handle Download-Intents in meiner App”

    Du musst Probleme lösen

    • (A) immer den Wähler zeigen
    • (B) sagen, Android, dass Ihre App sollte ein Teil der chooser werden
    • (C) verarbeiten den "download"

    (A) immer den Wähler zeigen

    ersetzen

     startActivity(i); 

    mit

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

    (B) sagen, Android, dass Ihre App sollte ein Teil der chooser werden

    Im Manifest muss man erklären, dass du eine Aktivität hast, die den relevanten Inhalt verarbeiten kann

     <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) verarbeiten den "download"

    MyDownloadActivity Dein MyDownloadActivity.onCreate() erhält alle Mime-Typen * / * für SEND, SENDTO, VIEW. Für Details siehe @ Vickyexpert-s Antwort

    Intent-Intercept ist ein kostenloses Android-Tool, um Intentionen zu analysieren. Es kann fast jede Absicht abfangen. Du kannst den Quellcode ansehen, um zu sehen, wie dies geschehen ist.

    Ich benutze sendtosd als mein Allzweck-Download-Handler. Es ist der Sourcecoder auf Github

    Sie müssen unter Code in Ihre Tätigkeit setzen, welche Antwort die Absicht,

     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 } } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.