English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تحقيق تحميل الصور المحلية باستخدام WebView في Android

Webview فتح ملف الصور المحلية يصبح معقدًا جدًا، والسلوك في نظام Android 3x 4x 5x مختلف، وكذلك الطريقة التعامل معه، لذا كنت قريبًا من الإنهيار. بعد الاختبار والتحسين، أصبح يعمل بشكل مثالي في جميع الإصدارات.

直接上代码

package com.testandroid.webview;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.JsResult;
import android.webkit.ValueCallback;
import android.webkit.WebBackForwardList;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import com.testandroid.R;
public class WebViewActivity extends AppCompatActivity { 
  private final String TAG = WebViewActivity.class.getSimpleName();
  private Button button;
  private WebView webView;
  private String recgPic = "http://m.shitu.chinaso.com/mx/index.html";
  public final static int FILECHOOSER_RESULTCODE = 1;
  public final static int FILECHOOSER_RESULTCODE_FOR_ANDROID_5 = 2;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_web_view);
    button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
      }
    });
    initTestWebView();
  }
  private void initTestWebView() {
    webView = (WebView) findViewById(R.id.tempWebView);
    WiewSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);
    webView.setWebChromeClient(new WebChromeClient() {
      @Override
      public boolean علىJsAlert(WebView view, String url, String message, JsResult result) {
        AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
        builder.setTitle("xxx تنبيه").setMessage(message).setPositiveButton("موافق", null);
        builder.setCancelable(false);
        builder.setIcon(R.mipmap.ic_launcher);
        AlertDialog dialog = builder.create();
        dialog.show();
        result.confirm();
        بازگشت به درست;
      }
      //تمديد مستعرض تحميل الملفات
      //3.0++ نسخة
      public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
        openFileChooserImpl(uploadMsg);
      }
      //3.0-- نسخة
      public void openFileChooser(ValueCallback<Uri> uploadMsg) {
        openFileChooserImpl(uploadMsg);
      }
      public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
        openFileChooserImpl(uploadMsg);
      }
      @Override
      public boolean علىShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
        onenFileChooseImpleForAndroid(filePathCallback);
        بازگشت به درست;
      }
    });
    webView.setWebViewClient(new WebViewClient() {
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        بازگشت به درست;
      }
    });
    webView.loadUrl(recgPic);
  }
  public ValueCallback<Uri> mUploadMessage;
  private void openFileChooserImpl(ValueCallback<Uri> uploadMsg) {
    mUploadMessage = uploadMsg;
    Intent i = new Intent(Intent.ACTION_GET_CONTENT);
    i.addCategory(Intent.CATEGORY_OPENABLE);
    i.setType("image/*");
    startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
  }
  public ValueCallback<Uri[]> mUploadMessageForAndroid5;
  private void onenFileChooseImpleForAndroid(ValueCallback<Uri[]> filePathCallback) {
    mUploadMessageForAndroid5 = filePathCallback;
    Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
    contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
    contentSelectionIntent.setType("image/*");
    Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
    chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
    chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");
    startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE_FOR_ANDROID_5);
  }
  @Override
  protected void onActivityResult(int requestCode, int resultCode,Intent intent) {
    إذا (requestCode == FILECHOOSER_RESULTCODE) {
      إذا (null == mUploadMessage)
        return;
      Uri result = intent == null || resultCode != RESULT_OK ? null: intent.getData();
      mUploadMessage.onReceiveValue(result);
      mUploadMessage = null;
    } آخراً إذا (requestCode == FILECHOOSER_RESULTCODE_FOR_ANDROID_5){
      إذا (null == mUploadMessageForAndroid5)
        return;
      Uri result = (intent == null || resultCode != RESULT_OK) ? null: intent.getData();
      إذا (result != null) {
        mUploadMessageForAndroid5.onReceiveValue(new Uri[]{result});
      } آخراً {
        mUploadMessageForAndroid5.onReceiveValue(new Uri[]{});
      }
      mUploadMessageForAndroid5 = null;
    }
  }
  @Override
  پublic boolean onKeyDown(int keyCode, KeyEvent event) {
    اگر webView.canGoBack() && event.getKeyCode() == KeyEvent.KEYCODE_BACK باشد {
      // دریافت لیست تاریخچه
      WebBackForwardList mWebBackForwardList = webView
          .copyBackForwardList();
      // ارزیابی لیست تاریخچه فعلی آیا در بالاترین نقطه است، در واقع canGoBack قبلاً ارزیابی کرده است
      اگر mWebBackForwardList.getCurrentIndex() > 0 باشد {
        webView.goBack();
        بازگشت به درست;
      }
    }
    بازگشت به سوپر.onKeyDown(keyCode, event);
  }
}

این تمام محتوای این مقاله است، امیدواریم که برای شما مفید باشد و از کتاوب تلاش کنید.

بيان: محتواي این مقاله از اینترنت است، حق مالکیت آن به صاحب محتوا تعلق دارد، محتوا توسط کاربران اینترنت به صورت خودجوش ارائه و بارگذاری شده است، این وب‌سایت مالکیت آن را ندارد، محتوا توسط انسان ویرایش نشده است و هیچ مسئولیتی در مورد آن ندارد. اگر محتوای مشمول حق نشر پیدا کرد، لطفاً ایمیل به آدرس notice#oldtoolbag.com ارسال کنید (لطفاً در هنگام ارسال ایمیل، علامت # را به @ تبدیل کنید) و شواهد مربوطه را ارائه دهید. اگر شواهد تأیید شود، این وب‌سایت محتوای مشمول حق نشر را فوراً حذف خواهد کرد.

أعجبك ذلك