如何使上传按钮在Android应用程序中工作?

问题描述:

这个问题遇到了好几次,虽然似乎没有任何解释可行。 (或者也许我没有在这个称为互联网的混乱中找到它)...如何使上传按钮在Android应用程序中工作?

我正在开发一个android应用程序,它打开一个包含上传按钮的HTML页面。它在WebView中不起作用。

我曾尝试:http://m0s-programming.blogspot.in/2011/02/file-upload-in-through-webview-on.html

但是Eclipse给出警告说"openFileChooser(ValueCallback uploadMsg) is never used locally"。该应用程序应与Android 2.2(API 8)及更高版本一起使用。

它给一些错误,我想由于WebView.setWebChromeClient(new CustomWebChromeClient()

错误放置

有人可以帮我在这?

+1

仔细阅读文章:'4)关于openFileChooser从未在本地使用的警告是正常的,事实上我很确定它应该给你警告。如果它不适合你,这个问题就在别的地方。“# – vorrtex 2013-03-16 10:26:01

+0

@vorrtex它确实给了我警告。但即使忽视这一点,该应用程序实际上在我的模拟器上崩溃。 – Chirag 2013-03-16 10:36:14

+1

我在文章的评论中发现了一个示例应用程序,经过一些小修改后,它就可以工作。 https://dl.dropbox.com/u/8047386/file-attach-cordova-upload-jqm-master_fixed.zip。我相信你的应用程序中有不同的东西可以压制,而上传工作正常。 – vorrtex 2013-03-16 11:06:35

有关文件上传的类似问题在这里回答:File Upload in WebView

而且不同版本的Android需要不同的方法:https://stackoverflow.com/posts/12746435/edit

下面是活动的完全自足代码:

public class FileAttachmentActivity extends Activity { 

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

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     WebView wv = new WebView(this); 
     wv.setWebViewClient(new WebViewClient()); 
     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) { 
       FileAttachmentActivity.this.showAttachmentDialog(uploadMsg); 
      } 

      // For Android > 3.x 
      public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) { 
       FileAttachmentActivity.this.showAttachmentDialog(uploadMsg); 
      } 

      // For Android > 4.1 
      public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) { 
       FileAttachmentActivity.this.showAttachmentDialog(uploadMsg); 
      } 
     }); 

     this.setContentView(wv); 

     wv.loadUrl("https://dl.dropbox.com/u/8047386/posttest.htm"); 

    } 

    private void showAttachmentDialog(ValueCallback<Uri> uploadMsg) { 
     this.mUploadMessage = uploadMsg; 

     Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
     i.addCategory(Intent.CATEGORY_OPENABLE); 
     i.setType("*/*"); 

     this.startActivityForResult(Intent.createChooser(i, "Choose type of attachment"), FILECHOOSER_RESULTCODE); 
    } 

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

你知道如何使它在Android 4.4上工作吗? – jcesarmobile 2013-11-11 07:47:35

+0

@jcesar WebChromeClient类在4.4中没有更改,所以它应该继续工作。但我现在无法验证,我不知道您有什么错误。 – vorrtex 2013-11-11 11:21:38

+0

没有任何错误,按钮只是无所事事,没有日志或错误跟踪。 – jcesarmobile 2013-11-11 11:28:20

一些设备上传按钮没有激活使用像三星S4和笔记3