2017-10-02 4 views
0

私はハイブリッドのAndroidアプリを持っています。JavaScriptを使用して回転/切り抜くために、Androidからwebviewにバイナリイメージファイルを送信しようとしています。AndroidからJavaScriptにバイナリイメージを送信するには

私はそれをbase64文字列に変換してその方法で送信しようとしましたが、時間がかかり過ぎて送信が完了しないことがありました。これは私が現在持っているものです。

public String bitMapToBase64(){ 
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
    //add support for jpg and more. 
    bitMap.compress(Bitmap.CompressFormat.PNG, 50, byteArrayOutputStream); 
    byte[] byteArray = byteArrayOutputStream .toByteArray(); 

    String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT); 

    return encoded; 
} 

はJavaScriptを使用してFileオブジェクトに変換後、バイナリとしてデータを送信し、WebViewの上でバイナリとしてそれを受け取るとする方法はありますか?

これを行うより効率的な方法がありますか?

答えて

0

あなたは、あなたのAndroidのJavaファイルにJavaScriptInterface

書き込みダウン次のコードを使用してそれを行うことができます

public class JavaScriptInterface { 
    Context mContext; 
    JavaScriptInterface(Context c) { 
     mContext = c; 
    }  

    @JavascriptInterface 
public String bitMapToBase64() 
    { 
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
    //add support for jpg and more. 
    bitMap.compress(Bitmap.CompressFormat.PNG, 50, byteArrayOutputStream); 
    byte[] byteArray = byteArrayOutputStream .toByteArray(); 

    String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT); 

    return encoded; 
    } 
} 

あなたのWebViewに

webView.setWebChromeClient(new WebChromeClient() {}); 
    WebSettings settings = webView.getSettings(); 
    settings.setJavaScriptEnabled(true); 
    settings.setDomStorageEnabled(true); 
    webView.addJavascriptInterface(new JavaScriptInterface(this), "Android"); 

を設定し、次のセットは、次に、あなたのコード次書き留めウェブページ

HTMLとjavascript:

<input type="button" value="Get from android" onClick="getFromAndroid()" /> 
<script type="text/javascript"> 
    var myVar = null; 
    function getFromAndroid() { 
     myVar = Android.bitMapToBase64(); 
     alert(myVar); 
    } 
</script> 
+0

それはあなたがBase64.encodeToString(データをENDCODEするために、この方法を試すことができます –

+0

(でも銀河S8で)エンコードするために時間がかかりすぎるので、私は、Javaの代わりに、base64で画像からバイナリデータを受け取ることができれば、私が求めていました、 Base64.NO_WRAP);私はこのメソッドを使ってバイト配列をエンコードし、大きなサイズの画像を使ってその高速イベントを処理していました。 –

+0

android.util.Base64.encodeToString(data、Base64.NO_WRAP); –

関連する問題