Turkcell | Geleceği Yazanlar

Webview Dosya Yükleme Sorunu

Arkadaşlar android ile bir projem var. Web sayfasını webview ile gösteriyorum. JavaScript vs. sorunsuz ancak, <input type="file"/> yani HTML' de olan dosya yükleme kodu çalışmıyor. İnternette araştıra araştıra buraya kadar geldim ama bundan sonrası yok.

 




	package com.example.berkay.kussohbet;


	import android.app.Activity;
	import android.app.AlertDialog;
	import android.app.ProgressDialog;
	import android.content.DialogInterface;
	import android.content.Intent;
	import android.graphics.Bitmap;
	import android.graphics.Color;
	import android.graphics.drawable.ColorDrawable;
	import android.net.Uri;
	import android.os.Bundle;
	import android.support.v7.app.ActionBar;
	import android.support.v7.app.ActionBarActivity;
	import android.util.Log;
	import android.view.KeyEvent;
	import android.view.Menu;
	import android.view.MenuItem;
	import android.webkit.ValueCallback;
	import android.webkit.WebChromeClient;
	import android.webkit.WebView;
	import android.webkit.WebViewClient;
	import android.widget.Toast;


	public class WebSayfasi extends Activity {


	  private WebView wv;


	  private ValueCallback<Uri> mUploadMessage;
	  private final static int FILECHOOSER_RESULTCODE = 1;


	  @Override
	  protected void onActivityResult(int requestCode, int resultCode,
	                  Intent intent) {
	    if (requestCode == FILECHOOSER_RESULTCODE) {
	      if (null == mUploadMessage) return;
	      Uri result = intent == null || resultCode != RESULT_OK ? null
	          : intent.getData();
	      mUploadMessage.onReceiveValue(result);
	      mUploadMessage = null;


	    }
	  }


	  @Override
	  public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	    setContentView(R.layout.websayfasi);


	    wv = new WebView(this);
	    wv.setWebViewClient(new WebViewClient());
	    wv.loadUrl("http://kusfisiltisi.com");
	    wv.getSettings().setJavaScriptEnabled(true);
	    wv.setWebChromeClient(new WebChromeClient() {
	      //The undocumented magic method override
	      //Eclipse will swear at you if you try to put @Override here
	      public void openFileChooser(ValueCallback<Uri> uploadMsg) {


	        mUploadMessage = uploadMsg;
	        Intent i = new Intent(Intent.ACTION_GET_CONTENT);
	        i.addCategory(Intent.CATEGORY_OPENABLE);
	        i.setType("image/*");
	        WebSayfasi.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);


	      }
	    });


	    setContentView(wv);
	  }
	}


	

cs.sonmez

Çar, 28/01/2015 - 08:20
yunus bey şu kod daha açık bu kodu kullan problemin kalmayacak.

    +1

    Yunus Berkay AKSOY

    28 Ocak 2015

    Sorunu çözdüm arkadaşlar, yabancı bir forumda bir arkadaş çözüm bulmuş. Destekleriniz için teşekkürler.

     

    
    
    
    	package com.example.berkay.kussohbet;
    
    
    	import android.app.Activity;
    	import android.content.Intent;
    	import android.content.res.Configuration;
    	import android.graphics.Bitmap;
    	import android.net.Uri;
    	import android.os.Bundle;
    	import android.webkit.ValueCallback;
    	import android.webkit.WebChromeClient;
    	import android.webkit.WebView;
    	import android.webkit.WebViewClient;
    
    
    	public class WebSayfasi extends Activity {
    
    
    	  WebView web;
    
    
    	  private ValueCallback<Uri> mUploadMessage;
    	  private final static int FILECHOOSER_RESULTCODE=1;
    
    
    	  @Override
    	  protected void onActivityResult(int requestCode, int resultCode,
    	                  Intent intent) {
    	    if(requestCode==FILECHOOSER_RESULTCODE)
    	    {
    	      if (null == mUploadMessage) return;
    	      Uri result = intent == null || resultCode != RESULT_OK ? null
    	          : intent.getData();
    	      mUploadMessage.onReceiveValue(result);
    	      mUploadMessage = null;
    	    }
    	  }
    
    
    	  @Override
    	  public void onCreate(Bundle savedInstanceState) {
    	    super.onCreate(savedInstanceState);
    	    setContentView(R.layout.websayfasi);
    
    
    	    web = (WebView) findViewById(R.id.webview);
    
    
    	
    	    web = new WebView(this);
    	    web.getSettings().setJavaScriptEnabled(true);
    	    web.loadUrl("http://kusfisiltisi.com");
    	    web.setWebViewClient(new myWebClient());
    	    web.setWebChromeClient(new WebChromeClient()
    	    {
    	      //The undocumented magic method override
    	      //Eclipse will swear at you if you try to put @Override here
    	      // For Android 3.0+
    	      public void openFileChooser(ValueCallback<Uri> uploadMsg) {
    
    
    	        mUploadMessage = uploadMsg;
    	        Intent i = new Intent(Intent.ACTION_GET_CONTENT);
    	        i.addCategory(Intent.CATEGORY_OPENABLE);
    	        i.setType("image/*");
    	        WebSayfasi.this.startActivityForResult(Intent.createChooser(i,"File Chooser"), FILECHOOSER_RESULTCODE);
    
    
    	      }
    
    
    	      // For Android 3.0+
    	      public void openFileChooser( ValueCallback uploadMsg, String acceptType ) {
    	        mUploadMessage = uploadMsg;
    	        Intent i = new Intent(Intent.ACTION_GET_CONTENT);
    	        i.addCategory(Intent.CATEGORY_OPENABLE);
    	        i.setType("*/*");
    	        WebSayfasi.this.startActivityForResult(
    	            Intent.createChooser(i, "File Browser"),
    	            FILECHOOSER_RESULTCODE);
    	      }
    
    
    	      //For Android 4.1
    	      public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture){
    	        mUploadMessage = uploadMsg;
    	        Intent i = new Intent(Intent.ACTION_GET_CONTENT);
    	        i.addCategory(Intent.CATEGORY_OPENABLE);
    	        i.setType("image/*");
    	        WebSayfasi.this.startActivityForResult( Intent.createChooser( i, "File Chooser" ), WebSayfasi.FILECHOOSER_RESULTCODE );
    
    
    	      }
    
    
    	    });
    
    
    	
    	    setContentView(web);
    
    
    	
    	  }
    
    
    	  public class myWebClient extends WebViewClient
    	  {
    	    @Override
    	    public void onPageStarted(WebView view, String url, Bitmap favicon) {
    	      // TODO Auto-generated method stub
    	      super.onPageStarted(view, url, favicon);
    	    }
    
    
    	    @Override
    	    public boolean shouldOverrideUrlLoading(WebView view, String url) {
    	      // TODO Auto-generated method stub
    
    
    	      view.loadUrl(url);
    	      return true;
    
    
    	    }
    
    
    	    @Override
    	    public void onPageFinished(WebView view, String url) {
    	      // TODO Auto-generated method stub
    	      super.onPageFinished(view, url);
    
    
    	
    	    }
    	  }
    
    
    	  //flipscreen not loading again
    	  @Override
    	  public void onConfigurationChanged(Configuration newConfig){
    	    super.onConfigurationChanged(newConfig);
    	  }
    	}
    
    
    	

    0

    onur

    28 Mart 2016

    merhaba ben bu kodları kullandım fakat uygulamayı çalıştırdıktan sonra dosya seçmek için tıkladığımda galeri veya kamera diye iki seçenek çıkıyor hangisini seçersem seçeyim "unfortunately has stopped" hatasını alıyorum

    0

    Ömer SÖNMEZ

    Bilgisayar Mühendisi - 28 Ocak 2015

    KOD BU ŞEKİLDE;

    public class website extends Activity
    {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.web_layout);
            
              WebView webview = (WebView) findViewById(R.id.webview);
              webview.getSettings().setJavaScriptEnabled(true);
              webview.loadUrl("linkini buraya kopyala");
              
              webview.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2");

              final ProgressDialog progress = ProgressDialog.show(this, "sitenin ismin yaz", "Yükleniyor...", true);
              progress.show();
              webview.setWebViewClient(new WebViewClient() {

                 @Override
                 public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    Toast.makeText(getApplicationContext(), "Sayfa yüklendi", Toast.LENGTH_SHORT).show();
                    progress.dismiss();
                 }

                 public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                    Toast.makeText(getApplicationContext(), "Bir hata oluştu", Toast.LENGTH_SHORT).show();
                    progress.dismiss();
                 }
              });

           }

        }

      berkayaksoy

      Çar, 28/01/2015 - 12:15
      Hocam maalesef bu kodda çalışmadı. HTML sayfalarında olan yükleme kutucukları (file upload) tıkladığımda hiç bir şey yapmıyor. Mesela chrome' de ona tıklayınca fotoğraf çek gönder, dosyalarımdan seç gibi ekran çıkıyor ama bunda tıklıyorum sadece bekliyor.
    Bu soruya cevap vermek için üye olmanız veya giriş yapmanız gerekmektedir.