2011-12-12 46 views
2

我正在使用webview开发Android 2.2.1应用程序。我似乎无法找到文件上传的工作解决方案。这是一个标准的文件上传表单。 Webview永远不会弹出浏览器框。在网络浏览器本身下,一切正常。在webview中,没有浏览弹出窗口。如果您知道解决方案,请告诉我在Android代码部分中添加的代码的确切位置。使用html格式在Android 2.2.1 webview中上传文件

文件上传下面表格:

<form name="form" id="fileupload" enctype="multipart/form-data" action="upload.asp" method="post"> 
<input id="blob" name="blob" class="simpleinput" type="file" /> 
</form> 

以下的Android代码:

package com.pic21.app; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class pic21 extends Activity { 
    /** Called when the activity is first created. */ 

    WebView mWebView; 

    private class HelloWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 
    } 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mWebView = (WebView) findViewById(R.id.webview); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.loadUrl("http://www.m.blah.com"); 
     mWebView.setWebViewClient(new HelloWebViewClient()); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
      mWebView.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
} 

回答

0

(通过在一个问题编辑OP回答见Question with no answers, but issue solved in the comments (or extended in chat)

的OP写道:

我环顾四周多一点,并找到使用webChromeClient的代码。下面的工作代码:

package com.pic21.app; 

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.webkit.ValueCallback; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

@SuppressWarnings("unused") 
public class pic extends Activity { 

private WebView mWebView; 

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); 

    mWebView = new WebView(this); 
    mWebView.setWebViewClient(new WebViewClient()); 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.loadUrl("http://www.m.blah.com"); 
    mWebView.setWebChromeClient(new WebChromeClient() 

    { 
    @SuppressWarnings("unused") 
     public void openFileChooser(ValueCallback<Uri> uploadMsg) { 

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

     } 
    }); 

    setContentView(mWebView); 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
mWebView.goBack(); 
return true; 
} 
return super.onKeyDown(keyCode, event); 
} 

} 

的AndroidManifest.xml文件中的代码应包含Internet权限

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.pic21.app" 
    android:versionCode="1" 
    android:versionName="1.0" > 

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

    <uses-sdk android:minSdkVersion="7" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:label="@string/app_name" 
      android:name=".pic21Activity" 
      android:theme="@android:style/Theme.NoTitleBar" 
      android:screenOrientation="portrait" 
      android:configChanges="orientation|keyboardHidden|keyboard" > 
      <intent-filter > 
       <action android:name="android.intent.action.MAIN" /> 

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

</manifest>