Dateien durch webView downloaden

  • Antworten:10
Gelöschter Account
  • Forum-Beiträge: 35

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
Gelöschter Account
  • Forum-Beiträge: 35

12.06.2017, 20:40:59 via Website

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

Antworten
swa00
  • Forum-Beiträge: 3.704

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
Gelöschter Account
  • Forum-Beiträge: 35

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
Gelöschter Account
  • Forum-Beiträge: 35

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
swa00
  • Forum-Beiträge: 3.704

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
Gelöschter Account
  • Forum-Beiträge: 35

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
Seilbahn
  • Forum-Beiträge: 40

20.06.2017, 16:44:40 via Website

So außer der Manifest hab ich nix kapiert, wenn ich den text bei mir reinschreibe sieht das so aus:
https://hastebin.com/ucaxapaxob.java

Antworten
swa00
  • Forum-Beiträge: 3.704

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
  • Admin
  • Forum-Beiträge: 7.958

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

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

swa00

Antworten