2017-03-22 8 views
1

アセットディレクトリのアセットを公開する私のプロジェクトにライブラリが含まれています。 Android 7でアプリを実行するとうまく動作し、webviewはアセットをうまく読み込みます。今日、私はKitkat(API 19)でアプリをテストしましたが、file://android_asset/someAsset.pngのような読み込みリソースは読み込まれません。AndroidのWebViewでアセットにアクセスできないKitKat

私のライブラリ用に作成されたaarファイルをチェックしましたが、これらのファイルが含まれています[明らかに、APKはAndroid 7上で正常に動作しているためです]。ここで

は、私のWeb設定です:クロームをデバッグするときに私が得る

WebSettings s = getSettings(); 
    s.setAllowFileAccess(true); 
    s.setSupportZoom(false); 
    s.setBuiltInZoomControls(false); 
    s.setDomStorageEnabled(true); 
    s.setJavaScriptCanOpenWindowsAutomatically(true); 
    s.setUseWideViewPort(true); 
    s.setLoadWithOverviewMode(true); 

    s.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); 
    s.setJavaScriptEnabled(true); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     s.setMediaPlaybackRequiresUserGesture(false); 
    } 
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) { 
     s.setAllowFileAccessFromFileURLs(true); 
     s.setAllowUniversalAccessFromFileURLs(true); 

    } 
    s.setGeolocationEnabled(false); 

エラーがある:File not found

私は、Androidスタジオにはもう存在しないIntelliJ設定:"Include assets from dependencies into APK"を参照して、SOに掲載された質問を読んでいます。 、https://developer.android.com/studio/projects/android-library.html示す

dependencies { 
    compile project(':myLib') 
} 

を追加すると、メインプロジェクトに資産を提供するのに十分であること、[それは明らかに、それゆえAARコンテンツん]:しかし私は、このドキュメントのページを発見しました。

まだ、私はそれらのリソースを表示することはできません。

私はまた、ライブラリからメインプロジェクトにassetsディレクトリをコピーしようとしましたが、まだ運がありません。それらはwebviewによって読み込まれず、同じエラーが発生します。

+0

'file://'ではなく 'file:///'を試してください。私は資産からのコンテンツを「WebView」に問題なくロードしています。 [my book](https://commonsware.com/Android)の[チュートリアル12](https://github.com/commonsguy/cw-omnibus/tree/master/EmPubLite-AndroidStudio/T12-Book/EmPubLite)を参照してください。 )、 例えば。 – CommonsWare

答えて

0

私は自分の疑問に答えるつもりですが、問題は愚かですが誰が知っているのでしょうか、誰かが同様の問題でつまずくでしょう。

WebViewのファイルをロードするためにの方法をWebViewClientと使用します。すべてのコンテンツが暗号化されているため、最初に解読する必要があります。

ロリポップ以降では、方法は異なるシグネチャがあります。

public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) 

代わり

public WebResourceResponse shouldInterceptRequest(final WebView view, String url) 

の私は、私は単に持っていた、新しいデバイスを使用して私のコードを書いていますので:

@TargetApi(Build.VERSION_CODES.LOLLIPOP) 
    @Override 
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { ... } 

とうまくいきました。古いデバイスでテストすると、そのメソッドはまったくトリガされず、期待した場所にファイルが見つからなくなります。

このメソッドのサポートが追加された後、すべてが機能し始めました。

コメントのために@CommonsWareに感謝します。

関連する問題