Как сжать и загрузить несколько изображений в веб-обозрение после зефира? - PullRequest
0 голосов
/ 25 января 2020

Я показываю веб-сайт в моем приложении, используя веб-просмотр. там мне нужно выбрать изображения из файла или с камеры. Одиночные изображения составляют около 8 Мб. Здесь я хочу выбрать несколько изображений, но загрузка занимает так много времени, так как сжать несколько изображений перед загрузкой и что я должен сделать в следующем коде , Пожалуйста, предложите мне решение. На этот же вопрос не было недавних ответов, а также приведенный код отличается от кода, который я показал здесь, поэтому не знаю, как изменить. Заранее спасибо.

 public class MainActivity extends AppCompatActivity {

            private static final int FILECHOOSER_RESULTCODE   = 1;
            private ValueCallback<Uri> mUploadMessage;
            private ValueCallback<Uri[]> mUploadMessages;
            private Uri mCapturedImageURI = null;

            private WebView mWebView;

            Context context = this;
            private SwipeRefreshLayout mySwipeRefreshLayout;
            private ViewTreeObserver.OnScrollChangedListener mOnScrollChangedListener;

            public ValueCallback<Uri[]> uploadMessage;

            //to upload file from mobile

            public static final int REQUEST_SELECT_FILE = 100;

            //TO CHECK INTERNET CONNECTIVITY LIVE

            final static String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
            IntentFilter intentFilter;
            MyReceiver receiver;


            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                intentFilter = new IntentFilter();
                intentFilter.addAction(CONNECTIVITY_ACTION);
                receiver = new MyReceiver();

                if (checkForInternet()) {
                    loadData();
                } else {
                    updateUI();
                }

                getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);

                mWebView = (WebView) findViewById(R.id.webView);
                mWebView.getSettings().setDomStorageEnabled(true);
                mWebView.getSettings().setJavaScriptEnabled(true);


                //to refresh swipe down
                mySwipeRefreshLayout = (SwipeRefreshLayout) this.findViewById(R.id.swipeContainer);

                //to check internet connectivity

                ConnectivityManager conMgr = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo netInfo = conMgr.getActiveNetworkInfo();

                if (netInfo == null || !netInfo.isConnected() || !netInfo.isAvailable()) {
                    //Toast.makeText(getApplicationContext(), "No internet connection", Toast.LENGTH_SHORT).show();
                    Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "OOPS! No internet", Snackbar.LENGTH_LONG);
                    snackbar.show();
                    return;

                }


                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    CookieManager cookieManager = CookieManager.getInstance();

                    cookieManager.setAcceptThirdPartyCookies(mWebView, true);

                }
                if (Build.VERSION.SDK_INT <= 18) {
                    mWebView.getSettings().setSavePassword(true);
                }


                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                    // chromium, enable hardware acceleration
                    mWebView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
                } else {
                    // older android version, disable hardware acceleration
                    mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
                }

                //to upload file
                WebSettings mWebSettings = mWebView.getSettings();
                mWebSettings.setSupportZoom(false);
                mWebSettings.setAllowFileAccess(true);
                mWebSettings.setAllowFileAccess(true);
                mWebSettings.setAllowContentAccess(true);

                mWebView.loadUrl("http://www.mywebsite.net/login");

                mWebView.setWebChromeClient(new WebChromeClient() {

                    // openFileChooser for Android 3.0+

                    public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType){
                        mUploadMessage = uploadMsg;
                        openImageChooser();
                    }

                    private void openImageChooser() {
                        try {
                            File imageStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "FolderName");
                            if (!imageStorageDir.exists()) {
                                imageStorageDir.mkdirs();
                            }
                            File file = new File(imageStorageDir + File.separator + "IMG_" + String.valueOf(System.currentTimeMillis()) + ".jpg");
                            mCapturedImageURI = Uri.fromFile(file);

                            final Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                            captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);

                            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                            i.addCategory(Intent.CATEGORY_OPENABLE);
                            i.setType("image/*");
                            i.putExtra(Intent.EXTRA_ALLOW_MULTIPLE,true);

                            Intent chooserIntent = Intent.createChooser(i, "Image Chooser");
                            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Parcelable[]{captureIntent});

                            startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }

                    // For Lollipop 5.0+ Devices

                    public boolean onShowFileChooser(WebView mWebView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
                        mUploadMessages = filePathCallback;
                        openImageChooser();
                        return true;
                    }

                    // openFileChooser for Android < 3.0

                    public void openFileChooser(ValueCallback<Uri> uploadMsg){
                        openFileChooser(uploadMsg, "");
                    }

                    //openFileChooser for other Android versions

                    public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
                        openFileChooser(uploadMsg, acceptType);
                    }

                    public void onProgressChanged(WebView view, int progress) {
                        //Make the bar disappear after URL is loaded, and changes string to Loading...
        //                pDialog.show();

                        setProgress(progress * 100);
                        if (progress == 100) {
        //                    pDialog.dismiss();
                            findViewById(R.id.layout_splash).setVisibility(View.GONE);
                            //show webview
                            findViewById(R.id.webView).setVisibility(View.VISIBLE);

                        }
                        //setTitle(R.string.app_name);
                    }
                });



                // To refresh on slide down

                mySwipeRefreshLayout.setOnRefreshListener(
                        new SwipeRefreshLayout.OnRefreshListener() {
                            @Override
                            public void onRefresh() {
                                mWebView.reload();
                            }
                        }
                );


        //To download the file from webview
                mWebView.setDownloadListener(new DownloadListener() {
                    public void onDownloadStart(String url, String userAgent,
                                                String contentDisposition, String mimetype,
                                                long contentLength) {
                        Intent i = new Intent(Intent.ACTION_VIEW);
                        i.setData(Uri.parse(url));
                        startActivity(i);
                    }
                });
            }

            @Override
            protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
                super.onActivityResult(requestCode, resultCode, intent);

                if(requestCode==FILECHOOSER_RESULTCODE) {

                    if (null == mUploadMessage && null == mUploadMessages) {
                        return;
                    }

                    if (null != mUploadMessage) {
                        handleUploadMessage(requestCode, resultCode, intent);

                    } else if (mUploadMessages != null) {
                        handleUploadMessages(requestCode, resultCode, intent);
                    }
                }
            }


            private void handleUploadMessage(int requestCode, int resultCode, Intent intent) {
                Uri result = null;
                try {
                    if (resultCode != RESULT_OK) {
                        result = null;
                    } else {
                        // retrieve from the private variable if the intent is null

                        result = intent == null ? mCapturedImageURI : intent.getData();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                mUploadMessage.onReceiveValue(result);
                mUploadMessage = null;
            }

            @TargetApi(Build.VERSION_CODES.LOLLIPOP)
            private void handleUploadMessages(int requestCode, int resultCode, Intent intent) {
                Uri[] results = null;
                try {
                    if (resultCode != RESULT_OK) {
                        results = null;
                    } else {
                        if (intent != null) {
                            String dataString = intent.getDataString();
                            ClipData clipData = intent.getClipData();
                            if (clipData != null) {
                                results = new Uri[clipData.getItemCount()];
                                for (int i = 0; i < clipData.getItemCount(); i++) {
                                    ClipData.Item item = clipData.getItemAt(i);
                                    results[i] = item.getUri();
                                }
                            }
                            if (dataString != null) {
                                results = new Uri[]{Uri.parse(dataString)};
                            }
                        } else {
                            results = new Uri[]{mCapturedImageURI};
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                mUploadMessages.onReceiveValue(results);
                mUploadMessages = null;
            }


            // onstart onstop for swipe refreshlayout
            @Override
            protected void onStart() {
                super.onStart();
                mySwipeRefreshLayout.getViewTreeObserver().addOnScrollChangedListener(mOnScrollChangedListener =
                        new ViewTreeObserver.OnScrollChangedListener() {
                            @Override
                            public void onScrollChanged() {
                                if (mWebView.getScrollY() == 0)
                                    mySwipeRefreshLayout.setEnabled(true);
                                else
                                    mySwipeRefreshLayout.setEnabled(false);

                            }
                        });
            }

            @Override
            protected void onStop() {
                super.onStop();
                mySwipeRefreshLayout.getViewTreeObserver().removeOnScrollChangedListener(mOnScrollChangedListener);
            }


            @Override
            public void onBackPressed() {
                if (mWebView.canGoBack()) {
                    mWebView.goBack();
                } else {
                    super.onBackPressed();
                }

            }

            //code for check internet connectivity live
            @Override
            protected void onResume() {
                super.onResume();
                registerReceiver(receiver, intentFilter);
            }

            @Override
            protected void onPause() {
                super.onPause();
                unregisterReceiver(receiver);
            }

            // Self explanatory method
            public boolean checkForInternet() {
                ConnectivityManager cm =
                        (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);

                NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
                return activeNetwork != null &&
                        activeNetwork.isConnectedOrConnecting();
            }

            void loadData() {
                // do sth
            }

            void updateUI() {
                // No internet connection, update the ui and warn the user
                Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "OOPS! No internet", Snackbar.LENGTH_LONG);
                snackbar.show();
            }


            private class MyReceiver extends BroadcastReceiver {
                @Override
                public void onReceive(Context context, Intent intent) {

                    String actionOfIntent = intent.getAction();
                    boolean isConnected = checkForInternet();
                    if (actionOfIntent.equals(CONNECTIVITY_ACTION)) {
                        if (isConnected) {
                            loadData();
                        } else {
                            updateUI();
                        }
                    }
                }
            }
        //code ends internet connectivity live
        }
...