Загрузить файл в веб-браузере Android 2.2.1, используя HTML-форму - PullRequest
2 голосов
/ 12 декабря 2011

Я разрабатываю приложение для Android 2.2.1 с использованием веб-браузера Я не могу найти рабочее решение для загрузки файла. Это стандартная форма загрузки файлов. Webview никогда не всплывает в окне браузера. Под самим веб-браузером все работает. В веб-просмотре нет просмотра всплывающих окон. Если вы знаете решение, скажите, пожалуйста, где именно разместить добавленный код в разделе кода Android.

Форма загрузки файла ниже:

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

1 Ответ

0 голосов
/ 27 января 2015

(Ответ от ОП в редактировании вопроса. См. Вопрос без ответов, но проблема решена в комментариях (или расширена в чате) )

ОП написал:

Я осмотрелся еще немного и нашел код, который работает с использованием 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 должен содержать интернет-разрешение

<?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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...