SoftGanz By Little Bear.

Web & Software Developer Gang.

Programing

Android : Input type="file" ไม่ทำงานบน webView

by Little Bear @December,21 2014 16.29 ( IP : 49...240 ) | Tags : Programing , App , Android App

เพิ่งเขียนให้ app hatyaicityclimate.org สามารถรายงานสถานการณ์ พร้อมอัพโหลดภาพได้ และรายงานระดับน้ำจากสมาชิกด้วย แต่ติดว่าเมื่อกดปุ่มเลือกไฟล์ภาพจากกล้อง ด้วย tag input type="file" จะไม่เด้งหน้าเลือกไฟล์มาให้

คำแนะนำคือให้เปลี่ยนไปใช้ WebChromeClient แทน แก้ไขตามตัวอย่าง หรือไปดูจากที่มาได้เลยครับ

public class MyWb extends Activity {

WebView web;

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

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

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

&nbsp; &nbsp; web = (WebView) findViewById(R.id.webview01);
<br />

&nbsp; &nbsp; web = new WebView(this);<br />
&nbsp; &nbsp; web.getSettings().setJavaScriptEnabled(true);
&nbsp; &nbsp; web.loadUrl("http://www.script-tutorials.com/demos/199/index.html");
&nbsp; &nbsp; web.setWebViewClient(new myWebClient());
&nbsp; &nbsp; web.setWebChromeClient(new WebChromeClient()<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  //The undocumented magic method override<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  //Eclipse will swear at you if you try to put @Override here<br />
&nbsp; &nbsp; &nbsp; &nbsp; // For Android 3.0+
&nbsp; &nbsp; &nbsp; &nbsp; public void openFileChooser(ValueCallback<Uri> uploadMsg) {<br />

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mUploadMessage = uploadMsg;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Intent i = new Intent(Intent.ACTION_GET_CONTENT);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i.addCategory(Intent.CATEGORY_OPENABLE);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i.setType("image/*");<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MyWb.this.startActivityForResult(Intent.createChooser(i,"File Chooser"), FILECHOOSER_RESULTCODE);<br />

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  }

&nbsp; &nbsp; &nbsp; &nbsp; // For Android 3.0+
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  public void openFileChooser( ValueCallback uploadMsg, String acceptType ) {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  mUploadMessage = uploadMsg;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  Intent i = new Intent(Intent.ACTION_GET_CONTENT);
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  i.addCategory(Intent.CATEGORY_OPENABLE);
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  i.setType("*/*");
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  MyWb.this.startActivityForResult(
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  Intent.createChooser(i, "File Browser"),
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  FILECHOOSER_RESULTCODE);
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  }

&nbsp; &nbsp; &nbsp; &nbsp; //For Android 4.1
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture){
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  mUploadMessage = uploadMsg;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  Intent i = new Intent(Intent.ACTION_GET_CONTENT);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  i.addCategory(Intent.CATEGORY_OPENABLE);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  i.setType("image/*");<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  MyWb.this.startActivityForResult( Intent.createChooser( i, "File Chooser" ), MyWb.FILECHOOSER_RESULTCODE );

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  }

&nbsp; &nbsp; });&nbsp; <br />
<br />
<br />
&nbsp; &nbsp; setContentView(web);&nbsp; <br />
<br />
<br />
}

public class myWebClient extends WebViewClient
{
&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void onPageStarted(WebView view, String url, Bitmap favicon) {
&nbsp; &nbsp; &nbsp; &nbsp; // TODO Auto-generated method stub
&nbsp; &nbsp; &nbsp; &nbsp; super.onPageStarted(view, url, favicon);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public boolean shouldOverrideUrlLoading(WebView view, String url) {
&nbsp; &nbsp; &nbsp; &nbsp; // TODO Auto-generated method stub

&nbsp; &nbsp; &nbsp; &nbsp; view.loadUrl(url);
&nbsp; &nbsp; &nbsp; &nbsp; return true;

&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void onPageFinished(WebView view, String url) {
&nbsp; &nbsp; &nbsp; &nbsp; // TODO Auto-generated method stub
&nbsp; &nbsp; &nbsp; &nbsp; super.onPageFinished(view, url);

<br />
&nbsp; &nbsp; }
}

//flipscreen not loading again
@Override
public void onConfigurationChanged(Configuration newConfig){<br />
&nbsp; &nbsp; super.onConfigurationChanged(newConfig);
}

}}

ที่มา openFileChooser not called when input type="file" is clicked on android 4.4 webview



ลิงก์ผู้สนับสนุน

Relate topics

แสดงความคิดเห็น

« 8964
หากท่านไม่ได้เป็นสมาชิก ท่านจำเป็นต้องป้อนตัวอักษรของ Anti-spam word ในช่องข้างบนให้ถูกต้อง
The content of this field is kept private and will not be shown publicly. This mail use for contact via email when someone want to contact you.
Bold Italic Underline Left Center Right Ordered List Bulleted List Horizontal Rule Page break Hyperlink Text Color :) Quote
คำแนะนำ เว็บไซท์นี้สามารถเขียนข้อความในรูปแบบ มาร์คดาวน์ - Markdown Syntax:
  • วิธีการขึ้นบรรทัดใหม่โดยไม่เว้นช่องว่างระหว่างบรรทัด ให้เคาะเว้นวรรค (Space bar) ที่ท้ายบรรทัดจำนวนหนึ่งครั้ง
  • วิธีการขึ้นย่อหน้าใหม่ซึ่งจะมีการเว้นช่องว่างห่างจากบรรทัดด้านบนเล็กน้อย ให้เคาะ Enter จำนวน 2 ครั้ง