Android CustomWebChromeClient openFileChooser在上传前调整图像大小

Android CustomWebChromeClient openFileChooser在上传前调整图像大小,android,webview,resize-image,Android,Webview,Resize Image,我正在使用一个不错的网页,我需要上传图像的网络视图。 现在的问题是,手机上的大多数图像都是2-3MB,我需要调整图像的大小 并且在上传开始前降低质量。 那么,我如何用stackoverflow上的示例代码调整它的大小呢 此代码正在打开文件选择器: //安卓3.0 public void openFileChooser(ValueCallback uploadMsg){ mUploadMessage=上传消息; 意向i=新意向(意向.行动\u获取\u内容); i、 addCategory(意图。类

我正在使用一个不错的网页,我需要上传图像的网络视图。 现在的问题是,手机上的大多数图像都是2-3MB,我需要调整图像的大小 并且在上传开始前降低质量。 那么,我如何用stackoverflow上的示例代码调整它的大小呢

此代码正在打开文件选择器:

//安卓3.0
public void openFileChooser(ValueCallback uploadMsg){
mUploadMessage=上传消息;
意向i=新意向(意向.行动\u获取\u内容);
i、 addCategory(意图。类别可打开);
i、 setType(“image/*”);
startActivityForResult(
Intent.createChooser(i,“图像浏览器”),
文件选择器\u结果代码
);
}
现在我需要一些调整大小,使副本和上传的大小。
(我知道如何创建调整大小的副本,但不知道如何与上面的代码交互)

我做了一些研究,并创建了一个包含内容的解决方案

它将直接从FileChooserHTML打开gallery,并将图像大小调整为200x200的样本大小和质量 七十五

package it.meiniserat;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.util.Locale;
导入it.meiniserat.R;
导入android.net.ConnectivityManager;
导入android.net.NetworkInfo;
导入android.net.Uri;
导入android.os.Build;
导入android.os.Bundle;
导入android.os.Environment;
导入android.provider.MediaStore;
导入android.annotation.SuppressLint;
导入android.annotation.TargetApi;
导入android.app.ActionBar;
导入android.app.Activity;
导入android.app.ProgressDialog;
导入android.content.ContentValues;
导入android.content.Context;
导入android.content.Intent;
导入android.database.Cursor;
导入android.graphics.Bitmap;
导入android.graphics.Bitmap.CompressFormat;
导入android.graphics.Bitmap.Config;
导入android.graphics.BitmapFactory;
导入android.graphics.BitmapFactory.Options;
导入android.graphics.Canvas;
导入android.graphics.Matrix;
导入android.graphics.Paint;
导入android.graphics.Point;
导入android.text.TextPaint;
导入android.util.Log;
导入android.view.Display;
导入android.view.KeyEvent;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.ViewConfiguration;
导入android.view.Window;
导入android.view.WindowManager;
导入android.webkit.ValueCallback;
导入android.webkit.WebChromeClient;
导入android.webkit.WebSettings.PluginState;
导入android.webkit.WebView;
导入android.webkit.WebViewClient;
导入android.widget.TextView;
导入android.widget.Toast;
@TargetApi(构建版本代码蜂窝)
@SuppressLint({“NewApi”,“SetJavaScriptEnabled”})
公共类MainActivity扩展了活动{
//主页URL!!
字符串myUrl=”http://www.imagebanana.com/"; // http://www.meininserat.it/mobile";
布尔hasNavigationBar=false;
AdView AdView;
网络视图;
语境;
ProgressDialog程序日志;
@SuppressLint(“新API”)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//装载机
progDailog=ProgressDialog.show(这是“Verbindung aufbauen…”),
“雷德……被咬的瓦滕……”,没错);
//ICS中的全屏和菜单栏
if(Build.VERSION.SDK\u INT>=Build.VERSION\u代码.冰淇淋\u三明治){
hasNavigationBar=!ViewConfiguration.get(此)
.hasPermanentMenuKey();
if(hasNavigationBar==true){
getWindow().requestFeature(Window.FEATURE\u ACTION\u栏);
getActionBar().show();
}否则{
ActionBar ActionBar=getActionBar();
actionBar.setDisplayShowTitleEnabled(false);
getActionBar().hide();
}
}否则{
this.requestWindowFeature(Window.FEATURE\u NO\u TITLE);
}
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,
WindowManager.LayoutParams.FLAG(全屏);
setContentView(R.layout.activity_main);
//上网
if(isNetworkAvailable(上下文)!=true){
progDailog.disclose();
Toast.makeText(getApplicationContext(),
“Fehler!Keine Internetverbinding.”,吐司,长度(长)
.show();
完成();
}
//加载url
mWebView=(WebView)findViewById(R.id.WebView);
setWebViewClient(新的HelloWebViewClient());
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setPluginState(pluginInstate.ON);
mWebView.getSettings().setPluginsEnabled(true);
mWebView.getSettings().setUseWideViewPort(true);
mWebView.getSettings().setUserAgentString(
Locale.getDefault().getLanguage());
/*
*语言检测URL字符串myDisplayLang=
*Locale.getDefault().getDisplayLanguage().toString();
* 
*if(myDisplayLang.contentEquals(“意大利语”){myUrl=
* "http://www.meininserat.it/mobile“;}否则{myUrl=
* "http://www.meininserat.it/mobile"; }
*/
loadUrl(myUrl);
setWebChromeClient(新的CustomWebChromeClient());
setWebViewClient(新的WebViewClient()){
@凌驾
公共void onPageFinished(WebView视图,字符串url){
progDailog.disclose();
}
@凌驾
接收错误时公共无效(WebView视图,int错误代码,
字符串说明,字符串失败(URL){
progDailog.disclose();
Toast.makeText(getApplicationContext(),
“费勒!”+描述,吐司。长度(长)。显示();
}
});
}
//检查互联网连接
公共静态布尔值isNetworkAvailable(上下文){
ConnectivityManager ConnectivityManager=(ConnectivityManager)上下文
.getSystemService(Context.CONNECTIVITY\u服务);
NetworkInfo activeNetworkInfo=connectivityManager
.getActiveNetworkInfo();
返回activeNetworkInfo=
package it.meininserat;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Locale;
import it.meininserat.R;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Point;
import android.text.TextPaint;
import android.util.Log;
import android.view.Display;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewConfiguration;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings.PluginState;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;
import android.widget.Toast;

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@SuppressLint({ "NewApi", "SetJavaScriptEnabled" })
public class MainActivity extends Activity {

// Main PAGE URL !!
String myUrl = "http://www.imagebanana.com/"; // http://www.meininserat.it/mobile";

boolean hasNavigationBar = false;
AdView adView;
WebView mWebView;

Context context;

ProgressDialog progDailog;

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // loader
    progDailog = ProgressDialog.show(this, "Verbindung aufbauen..",
            "Lade ....bitte warten....", true);

    // Fullscreen and Menubar in ICS
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        hasNavigationBar = !ViewConfiguration.get(this)
                .hasPermanentMenuKey();
        if (hasNavigationBar == true) {
            getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
            getActionBar().show();
        } else {
            ActionBar actionBar = getActionBar();
            actionBar.setDisplayShowTitleEnabled(false);
            getActionBar().hide();

        }
    } else {
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    }

    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);

    // check internet

    if (isNetworkAvailable(context) != true) {
        progDailog.dismiss();
        Toast.makeText(getApplicationContext(),
                "Fehler ! Keine Internetverbindung.", Toast.LENGTH_LONG)
                .show();
        finish();
    }

    // load url
    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.setWebViewClient(new HelloWebViewClient());
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setPluginState(PluginState.ON);
    mWebView.getSettings().setPluginsEnabled(true);
    mWebView.getSettings().setUseWideViewPort(true);
    mWebView.getSettings().setUserAgentString(
            Locale.getDefault().getLanguage());

    /*
     * Language detection URL String myDisplayLang =
     * Locale.getDefault().getDisplayLanguage() .toString();
     * 
     * if (myDisplayLang.contentEquals("italiano")) { myUrl =
     * "http://www.meininserat.it/mobile"; }else{ myUrl =
     * "http://www.meininserat.it/mobile"; }
     */

    mWebView.loadUrl(myUrl);
    mWebView.setWebChromeClient(new CustomWebChromeClient());

    mWebView.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageFinished(WebView view, String url) {
            progDailog.dismiss();
        }

        @Override
        public void onReceivedError(WebView view, int errorCode,
                String description, String failingUrl) {
            progDailog.dismiss();
            Toast.makeText(getApplicationContext(),
                    "Fehler ! " + description, Toast.LENGTH_LONG).show();
        }

    });

}

// check internet connection
public static boolean isNetworkAvailable(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager
            .getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
    case R.id.menu_rate:
        new AppRating().goToMarket(context);
        return true;
    case R.id.menu_exit:
        finish();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        if (mWebView.canGoBack() == true) {
            mWebView.goBack();
        } else {
            finish();
        }
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

public static Uri getImageContentUri(Context context, File imageFile) {
    String filePath = imageFile.getAbsolutePath();
    Cursor cursor = context.getContentResolver().query(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            new String[] { MediaStore.Images.Media._ID },
            MediaStore.Images.Media.DATA + "=? ",
            new String[] { filePath }, null);
    if (cursor != null && cursor.moveToFirst()) {
        int id = cursor.getInt(cursor
                .getColumnIndex(MediaStore.MediaColumns._ID));
        Uri baseUri = Uri.parse("content://media/external/images/media");
        return Uri.withAppendedPath(baseUri, "" + id);
    } else {
        if (imageFile.exists()) {
            ContentValues values = new ContentValues();
            values.put(MediaStore.Images.Media.DATA, filePath);
            return context.getContentResolver().insert(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        } else {
            return null;
        }
    }
}

// Fix Upload
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;
        if (resultCode != RESULT_OK) {
            mUploadMessage.onReceiveValue(null);
            return;
        }
        Uri result = intent.getData(); // get file
        if (result == null) {
            mUploadMessage.onReceiveValue(null);
            return;
        }

        String fPath = getPath(result);

        // we actually don't allow http links in gallery like google+ or
        // facebook images
        File file = new File(fPath);
        if (!file.exists()) {
            mUploadMessage.onReceiveValue(null);
            Toast.makeText(getApplicationContext(),
                    "Please select a local Imagefile.", Toast.LENGTH_LONG)
                    .show();
            return;
        }

        // Resize+
        Bitmap bitmap = BitmapFactory.decodeFile(fPath);
        int newWidth = 200;
        int newHeight = 200;
        Bitmap scaledBitmap = Bitmap.createBitmap(newWidth, newHeight,
                Config.ARGB_8888);

        float ratioX = newWidth / (float) bitmap.getWidth();
        float ratioY = newHeight / (float) bitmap.getHeight();
        float middleX = newWidth / 2.0f;
        float middleY = newHeight / 2.0f;

        Matrix scaleMatrix = new Matrix();
        scaleMatrix.setScale(ratioX, ratioY, middleX, middleY);

        Canvas canvas = new Canvas(scaledBitmap);
        canvas.setMatrix(scaleMatrix);
        canvas.drawBitmap(bitmap, middleX - bitmap.getWidth() / 2, middleY
                - bitmap.getHeight() / 2, new Paint(
                Paint.FILTER_BITMAP_FLAG));

        String resizedFileName = "ImageResized.png";
        File sdCard = Environment.getExternalStorageDirectory();
        File dir = new File(sdCard.getAbsolutePath());
        File filedir = new File(dir, resizedFileName);

        try {
            FileOutputStream fos = new FileOutputStream(filedir);
            scaledBitmap.compress(CompressFormat.PNG, 70, fos);
            fos.close();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            mUploadMessage.onReceiveValue(null);
            return;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            mUploadMessage.onReceiveValue(null);
            return;
        }

        mUploadMessage.onReceiveValue(getImageContentUri(context, filedir));

    }
}

protected class CustomWebChromeClient extends WebChromeClient {

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

    // Andorid 3.0 +
    public void openFileChooser(ValueCallback<Uri> uploadMsg,
            String acceptType) {
        openFileChooser(uploadMsg);
    }

    // Android 3.0
    public void openFileChooser(ValueCallback<Uri> uploadMsg) {
        mUploadMessage = uploadMsg;
        Intent i = new Intent(
                Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        // i.addCategory(Intent.CATEGORY_APP_GALLERY);
        i.setType("image/*");
        // startActivityForResult( Intent.createChooser(i,
        // "Image Browser"),FILECHOOSER_RESULTCODE);
        startActivityForResult(i, FILECHOOSER_RESULTCODE);
    }

}


}