2

WebView外部SDカードからの画像を表示するだけです。これはうまく機能しますが、イメージが新しいデータで上書きされた場合、 はイメージをWebView更新しません。

これは、アクティビティWebViewの方法でまったく新しい方法で作成されているため、さらに興味深いものです。onCreateこれが私のコードです:

@Override
public void onCreate(Bundle savedInstanceState)
{
    Log.d(TAG, "Creating Viewer");
    super.onCreate(savedInstanceState);

    Intent intent = getIntent();
    Bundle extras = intent.getExtras();

    String imagePath = extras.getString("imgFile");

    shareImage(Uri.fromFile(new File(imagePath)));

    setContentView(R.layout.viewer_test);

    WebView viewer = (WebView) findViewById(R.id.imageViewer);
    viewer.getSettings().setAllowFileAccess(true);
    viewer.getSettings().setBuiltInZoomControls(false);
    viewer.getSettings().setLoadWithOverviewMode(true);
    viewer.getSettings().setUseWideViewPort(true);
    viewer.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    String filename = "file://"+ imagePath;
    String html = "<html><head></head><body bgcolor=\"#000000\"><center><img src=\""+ filename + "\"></center></body></html>";
    viewer.loadDataWithBaseURL(null, html, "text/html","utf-8", null);
    viewer.reload();
}

保存されたパスの画像は、パスがimagePathこのアクティビティに送信される前に、別のアクティビティによって上書きされます。ただし、WebViewまだ古い画像データが表示されます。

ご覧のとおり、既にキャッシュ モードを設定しようとしましたが、手動で をリロードしようとしましたがWebView、残念ながらうまくいきませんでした。

また、ファイルマネージャで確認したところ、SD カードのイメージが新しいデータで上書きされています。ファイルを何度も上書きしようとしましたが、それもうまくいきません。どういうわけか、画像データはどこかにキャッシュされます。これを回避し、毎回新しいデータをロードするにはどうすればよいですか?

(明らかに、別のファイル名で新しいファイルを作成しても問題ありませんが、古いファイルを置き換えたいです。)

4

1 に答える 1

6

私は Webview にあまり詳しくありません。ただし、通常の Web サイトでは、クエリ文字列を使用して一意のアドレスをエミュレートしながら、同じ画像をロードできます。これは、css ファイルの Web ページでよく使用されます。

例: http://www.webpage.com/image.jpg?cachekey=23456456754 画像が読み込まれるたびにキャッシュキーをランダム化することにより、画像は一意の画像として扱われ、キャッシュからは読み込まれません。

ファイル名の文字列の末尾にランダム化された int または文字列を配置します

Random r = new Random();
int randInt = r.nextInt(8000000-1000000) + 1000000;
String query = "?cachekey=" + randInt ;
String html = "<html><head></head><body bgcolor=\"#000000\"><center><img src=\""+ filename + query "\"></center></body></html>";

これはまだテストしていません。しかし、それを解決する方法はアイデアです。

于 2012-11-27T12:14:33.800 に答える