Ladda ner filer från en WebView

Diskussion i 'Frågor, support och diskussion' startad av joynes, 11 jan 2010.

  1. joynes

    joynes Kid Droid Medlem

    Blev medlem:
    8 jan 2010
    Inlägg:
    36
    Mottagna gillanden:
    0

    MINA ENHETER

    Hej!

    Jag har integrerat en WebView med min Android applikation. Går jag till en sida med nerladdninsbart innehåll så fungerar inte dessa länkar, tex mp3-filer. Vanliga länkar fungerar bra och sidan laddas om, men klickar man på tex mp3-filer så händer ingenting.

    Har jag glömt att ovverrida någon metod? Min kod är följande:

    /Mvh Johannes

    Kod:
    public class Browser extends Activity {
    
    	// Called when the activity is first created.
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		
    		// Let's display the progress in the activity title bar, like the
    		// browser app does.
    		getWindow().requestFeature(Window.FEATURE_PROGRESS);
    		
    		
    		final Activity activity = this;
    		setContentView(R.layout.main);
    		
    		WebView webview;
    		webview = (WebView) findViewById(R.id.webview);
    		
    		webview.getSettings().setJavaScriptEnabled(true);
    		webview
    		.loadUrl("http://joynes.se/release/index.php?place=files&dir=music/mp3");
    		
    		webview.setWebViewClient(new WebViewClient() {
    			public void onReceivedError(WebView view, int errorCode,
    					String description, String failingUrl) {
    				Toast.makeText(activity, "Oh no! " + description,
    						Toast.LENGTH_SHORT).show();
    			}
    		});
    
    	}
    
    }
     
  2. joynes

    joynes Kid Droid Medlem

    Blev medlem:
    8 jan 2010
    Inlägg:
    36
    Mottagna gillanden:
    0

    MINA ENHETER

    Kan det ha nåt att göra med detta?

    Kod:
    	webview.setDownloadListener(new DownloadListener() {
    			
    			public void onDownloadStart(String arg0, String arg1, String arg2,
    					String arg3, long arg4) {
    				// TODO Auto-generated method stub
    				
    			}
    		});
    
     
  3. afzkl

    afzkl Youth Droid Medlem

    Blev medlem:
    27 aug 2009
    Inlägg:
    184
    Mottagna gillanden:
    6

    MINA ENHETER

    Tja har inte jätte stor koll men borde vara där det magiska ska ske. Borde vara något i stil med nedan, testa du om du kan få det att fungera...
    Kod:
    ProgressDialog dlDialog;
    	
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
                  
                 
            WebView v = new WebView(this);
            setContentView(v);
            
            v.loadUrl("http://joynes.se/release/index.php?place=files&dir=music/mp3");
            v.getSettings().setJavaScriptEnabled(true);
            
            v.setWebViewClient(new WebViewClientDemo());
            
            v.setDownloadListener(new DownloadListener() {
    			
    			@Override
    			public void onDownloadStart(final String url, String userAgent,
    				
    				String contentDisposition, String mimetype, long contentLength) {
    				
    				dlDialog = new ProgressDialog(Main.this);
    				
    				
    				dlDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    				dlDialog.setTitle("Downloading File");
    				dlDialog.setMax((int)contentLength);
    				dlDialog.show();
    
    		    	new Thread(new Runnable() {
    		    		
    		    		public void run()
    		    		{
    		    						    						    			
    		    			String filePath = "sdcard/";
    		    			
    		 			    			
    		    			InputStream is = null;
    		    			OutputStream os = null;
    			        	URLConnection URLConn = null;
    		    			
    		    	    	
    		    	    	try
    		    	    	{
    		    	    		URL fileUrl;
    		    	    		byte[] buf;
    		    	    		int ByteRead = 0;
    		    	    		int ByteWritten=0;
    		    	    		fileUrl= new URL(url);
    		    	    		
    		    	    		URLConn = fileUrl.openConnection();
    	    		
    		    	    		is = URLConn.getInputStream();
    
    		    	    		
    		    	    		String fileName = url.substring(url.lastIndexOf("/") +1);
    		  
    		    	    		
    			    		
    		    	    		os = new BufferedOutputStream(new FileOutputStream(filePath + fileName));
    
    		  	    		
    		    	    		buf = new byte[1024];
    		    	       		
    		    	    		while ((ByteRead = is.read(buf)) != -1) {
    		    	    			
    		    	    			os.write(buf, 0, ByteRead);
    		    	    			ByteWritten += ByteRead;
    		    	    			
    		    	    			final int tmpWritten = ByteWritten;
    		    	    			runOnUiThread(new Runnable() {  	
        	    			
    		    	    				public void run()
    		    	    				{
    		    	    					dlDialog.setProgress(tmpWritten);
    		    	    				}
        	    			
    		    	    			});
    		    	    		} 	
    		    	    		
    		    	    		
    		    	    		dlDialog.dismiss();
    		    	    		
    		    	    	}
    		    	    	catch(Exception e)
    		    	    	{
    		    	    		e.printStackTrace();
    		    	    	}
    		    	    		
    		    		}
    		    	}).start();
    			}
    			
    		});
    		
           
            
    	}
            
        private class WebViewClientDemo extends WebViewClient {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        }
    
    
    

    Edit: Uppdaterade koden då den inte fungerade(hade inte testat den), även om du inte använder den kan det finnas nån annan som kanske kan ha nytta av den.:)
     
    Last edited: 12 jan 2010
  4. joynes

    joynes Kid Droid Medlem

    Blev medlem:
    8 jan 2010
    Inlägg:
    36
    Mottagna gillanden:
    0

    MINA ENHETER

    Tja!
    Tackar! Det fungerar bra! Jag undrar om det går att starta den vanliga Download Managern. Jag ska prova med en intent.

    /Mvh Johannes
     
  5. afzkl

    afzkl Youth Droid Medlem

    Blev medlem:
    27 aug 2009
    Inlägg:
    184
    Mottagna gillanden:
    6

    MINA ENHETER

    Har ingen aning har aldrig använt en webview men det ser ju ur som om dolphoin browser använder den vanliga download managern så borde ju gå om han inte skapat en exakt kopia av den.
     
  6. joynes

    joynes Kid Droid Medlem

    Blev medlem:
    8 jan 2010
    Inlägg:
    36
    Mottagna gillanden:
    0

    MINA ENHETER

    Tja!
    Ja det låter väldigt troligt att den går att använda standard Download Managern. Särskilt med tanke på hur android appar är uppbyggda som tjänster som kan kommunicera med varandra.

    Dock hittar jag inte så mycket dokumentation om just WebView:s för att täcka in detta scenario. Av ett annat forum att dömma ska man bara använda setDownloadListener om man vill ha nån extra funktionalitet vid just nerladdningen. Download Managern borde alltså även ha anropats.

    /Mvh Johannes
     
  7. knutigro

    knutigro Baby Droid Medlem

    Blev medlem:
    18 dec 2009
    Inlägg:
    19
    Mottagna gillanden:
    0

    MINA ENHETER

    Hei,

    Jag har forsökt använda afzkl sin kod men av nån anledning blir filen som lastas ned några kilobyte mindre än originalen och blir därmed korrupt. Är det nån som vet var felet kan ligga?

    Jag har bara bytt ut "v.loadUrl" med min egen direktlink til det som ska lastas ned, - i mitt tilfälle en zipfil.

    mvh knut
     
  8. HFM

    HFM Infant Droid Medlem

    Blev medlem:
    24 jul 2010
    Inlägg:
    1
    Mottagna gillanden:
    0

    MINA ENHETER

    Lägg till:

    "is.close();" och "os.close();" efter "dlDialog.dismiss();"

    så borde det fixa sig! :)