Dateien durch webView downloaden

  • Antworten:10
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 34

12.06.2017, 19:41:50 via Website

Moin zusammen! :)

Ich arbeite momentan daran, ein kleine App zu erstellen, welche einfach nur eine Unterseite meiner Website anzeigt. Das funktioniert auch alles problemlos.
Allerdings befinden sich auf der Website fast ausschließlich Download-Links, welche eben nicht funktionieren.
Könntet ihr mir vielleicht helfen und erklären, wie ich das aktivieren kann?
MfG

Antworten
  • Forum-Beiträge: 34

12.06.2017, 20:40:59 via Website

Wie genau kann ich denn jetzt einem Button auf der Website den DownloadListener zuordnen?

Antworten
  • Forum-Beiträge: 2.903

12.06.2017, 22:02:43 via Website

Hallo Lars,

Auf deiner Webseite befindet sich doch bereits ein Link/Button der den Download-Process anwirft.
Das musst du nicht in deiner App tun .

Du musst den Listener dem WebView in der App zuordnen , damit er das von der Web geschickte
lädt und sichert .

siehe Link oben

Und das Netz ist voll von Beispielen
https://stackoverflow.com/a/9722251

Was du dann schlussendlich mit den Daten tun magst, liegt in Deinem Ermessen

— geändert am 12.06.2017, 22:11:12

Liebe Grüße - Stefan
[ App - Entwicklung ]

Pascal P.

Antworten
  • Forum-Beiträge: 34

12.06.2017, 22:05:05 via Website

Achso! :D
Okay, danke nochmal für die schnelle Antwort. Werde mich dann gleich morgen damit auseinandersetzen

Grüße,
Lars

Antworten
  • Forum-Beiträge: 34

13.06.2017, 14:29:36 via Website

Hey! :)

Aus irgendeinem Grund scheint es immer noch nicht zu funktionieren :/

Das wäre jetzt mein Code:

MainActivity.java:

package de.playlikelars.larszusammenfassung;

import android.content.Intent;
import android.net.Uri;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.DownloadListener;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {


    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Snackbar.make(findViewById(R.id.activity_main_layout), "Das Passwort ist 'lewotipe'", Snackbar.LENGTH_LONG).show();

        webView = (WebView)findViewById(R.id.webView);
        webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("http://www.schulzeug.playlikelars.de/");

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.clearView();
                view.loadUrl(url);

                webView.setDownloadListener(new DownloadListener() {
                    public void onDownloadStart(String url, String userAgent,
                                                String contentDisposition, String mimetype,
                                                long contentLength) {

                        Uri uri = Uri.parse(url);
                        Intent intent = new Intent(Intent.ACTION_VIEW,uri);
                        startActivity(intent);
                    }
                });

                return true;
            }
        });

    }



}

Bzw. die
AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="de.playlikelars.larszusammenfassung">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Antworten
  • Forum-Beiträge: 2.903

13.06.2017, 14:32:27 via Website

a) Öhm , darf man fragen , warum Du einen Listener in einen Listener setzt ??? :-)
WinkMitDemZaunPfahl

b) Mach noch bitte ein READ_EXTERNAL_STORAGE in die Manifest

c) und warum startest du direkt einen neue Activity , wenn der Download gerade erst begonnen hat
Da sollte eher der DownloadManger sitzen - es sei denn , der sitzt da drin

 //  Download
    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.allowScanningByMediaScanner();
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(url,  
                contentDisposition, MimeTypeMap.getFileExtensionFromUrl("https://xxxx")));
            DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
            dm.enqueue(request);
            Toast.makeText(getApplicationContext(), "Downloading File",Toast.LENGTH_LONG).show();
        }
    });

— geändert am 13.06.2017, 14:47:01

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
  • Forum-Beiträge: 34

13.06.2017, 16:13:18 via Website

a) Ich bin nicht wirklich erfahren mit Android-Developement^^ Ich habe mir den Code aus einigen alten Apps von mir zusammengebastelt und etwas manuell ausgetauscht :p
b) Wird erledigt ;)
c) Habe den Code jetzt mal eingebaut und den Link zu Testzwecken ausgetauscht (auf playlikelars.de) Die Bilder werden dort jetzt auch angezeigt, aber das Downloaden von Dateien funktioniert immer noch nicht und ich bekomme folgende Error-Meldung:image

Achja: Ich musste die Url teilweise immer wieder austauschen, damit sie schlussendlich angezeigt wird. Woran könnte das liegen?

— geändert am 13.06.2017, 16:14:25

Antworten
  • Forum-Beiträge: 2.903

20.06.2017, 16:47:58 via Website

Und auch dich gilt hier die goldene Regel :

Wir benötigen dazu den ErrorLog aus dem LogCat von AS.
Ansonsten können wir nicht helfen.

Liebe Grüße - Stefan
[ App - Entwicklung ]

Pascal P.

Antworten
Ludy
  • Mod
  • Blogger
  • Forum-Beiträge: 7.167

20.06.2017, 17:53:40 via Website

Hallo Seilbahn,

ich will dir nicht zu nah treten, aber der Code macht so kein Sinn und das ist ein Fehler der in den Grundlagen behandelt wird.
Initialisieren (kurz init) von View und View#functions außerhalb von Methoden ist nicht zulässig.

Und wenn der WebView view heist muss er bei jeder init verwendet werden und nicht auf einmal webView heißen ;-)

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

Lebensmittelwarnung App-Thread

Download Samsung Firmware Tool

swa00

Antworten

Empfohlene Artikel