English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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 ارسال کنید (لطفاً در هنگام ارسال ایمیل، علامت # را به @ تبدیل کنید) و شواهد مربوطه را ارائه دهید. اگر شواهد تأیید شود، این وبسایت محتوای مشمول حق نشر را فوراً حذف خواهد کرد.