我想让一个android应用程序访问我创建的一个简单的Sinatra网站。该网站允许用户上传照片。通过以下方式使用WebView,可以浏览手机中的文件。浏览在WebView中停止工作的文件
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.loadUrl("http://10.0.2.2:4567");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
当我试图让应用程序更好时,我发现这段代码使得应用程序看起来(并且应该工作)更好。
public class MainActivity extends Activity {
protected WebView myWebView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myWebView= (WebView) findViewById(R.id.webview);
myWebView.loadUrl("http://10.0.2.2:4567");
myWebView.setWebViewClient(new NewWebViewClient());
}
private class NewWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView webview,String url)
{
webview.loadUrl(url);
return true;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack())
{
myWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
现在的问题是,当我点击浏览按钮在我的网页浏览菜单没有出现在我的屏幕上。其实没有什么反应。我猜NewWebViewClient会产生这个问题,但它怎么可能呢?有没有办法再次浏览文件?我是否必须手动添加它,因为我认为它在早期的Android版本中是必需的?
我的目标是API 18,但API 17也出现同样的问题。
---------------------------------编辑------------ -------------------
仍然有同样的问题。 openFileChooser解决了老年人的API但API 18
myWebView.setWebChromeClient(new WebChromeClient()
{
public void openFileChooser(ValueCallback<Uri> uploadMsg) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
Intent chooserIntent = Intent.createChooser(i,"Image Chooser");
MainActivity16.this.startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE);
}
});
setContentView(myWebView);
}
找遍整个计算器和所有的解决方案建议使用openFileChooser,但这种解决方案似乎只与旧的API工作。 API 18似乎只适用于WebView,但WebView缺少像shouldOverideUrl这样的几个功能。必须有一种方法。 这可能是阅读苗条形式的问题吗? –