0

Javascript を介してローカル ファイルを渡して img ソースを設定していますが、動作させることができません。パスを設定するJavaScriptは

<img src='" + the_payload.image + "' width='" + (cellWidth()-20) + "' />

送信する文字列は完全なファイル パスです。

file:///mnt/sdcard/Android/data/com.newvisioninteractive.android.myapp/files/c87eba4a-5349-4a55-baec-cc573a5f7571-thumb.png

ContentProviders と ParcelFileDescriptors に関する投稿を見ましたが、それも機能しませんでした。

これは、特定の日に画像を表示するカレンダー ビュー用です。ローカル画像ではなく、静的画像を渡すと正常に動作します。

また、設定しました

    mWebView.getSettings().setAllowFileAccess(true);
    mWebView.getSettings().setJavaScriptEnabled(true);

他のアクセス許可を設定する必要がありますか?

4

2 に答える 2

1

解決策は、ContentProvider クラスを拡張し、openFile(Uri, String) メソッドをオーバーライドすることです。

package com.packagename.provider;
public class MyProvider extends ContentProvider { 
     @Override
     public ParcelFileDescriptor openFile(Uri uri, String mode){
        URI fileURI = URI.create( "file://" + uri.getPath() );
        File file = new File( fileURI );

        ParcelFileDescriptor parcel = null;
        try {
            parcel = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
        } catch (FileNotFoundException e) {
            Log.e( TAG, "Error finding: " + fileURI + "\n" + e.toString() );
        }

        return parcel;
     }
}

次に、 AndroidManifest.xml ファイルにインクルードします

 <provider
        android:name=".provider.MyProvider"
        android:authorities="com.packagename" />

その後、通常はファイルにアクセスできます

 file://sdcard/Android/data/com.packagename/image.jpg

を使用して

 content://com.packagename/sdcard/Android/data/com.packagename/image.jpg

したがって、基本的に file:// を content://com.packagename に置き換えます

于 2012-07-03T19:37:19.967 に答える
0

file:///android_assets/image.png を使用してみて、Android アセットに画像を配置します

于 2012-07-03T01:14:39.133 に答える