안드로이드 웹뷰 캐쉬를 SD 메모리에 쓰기

안드로이드 웹뷰 캐쉬를 내부메모리가 아닌 외부로 쓰게 할려고 방법을 찾다가
해외 사이트에서 방법을 찾았는데 까먹을까봐 여기 기록해둠

package com.devahead.androidwebviewcacheonsd;

import java.io.File;
import android.app.Application;
import android.os.Environment;

public class ApplicationExt extends Application
{
	// NOTE: the content of this path will be deleted
	//       when the application is uninstalled (Android 2.2 and higher)
	protected File extStorageAppBasePath;

	protected File extStorageAppCachePath;

	@Override
	public void onCreate()
	{
		super.onCreate();

		// Check if the external storage is writeable
		if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
		{
			// Retrieve the base path for the application in the external storage
			File externalStorageDir = Environment.getExternalStorageDirectory();

			if (externalStorageDir != null)
			{
				// {SD_PATH}/Android/data/com.devahead.androidwebviewcacheonsd
				extStorageAppBasePath = new File(externalStorageDir.getAbsolutePath() +
					File.separator + "Android" + File.separator + "data" +
					File.separator + getPackageName());
			}

			if (extStorageAppBasePath != null)
			{
				// {SD_PATH}/Android/data/com.devahead.androidwebviewcacheonsd/cache
				extStorageAppCachePath = new File(extStorageAppBasePath.getAbsolutePath() +
					File.separator + "cache");

				boolean isCachePathAvailable = true;

				if (!extStorageAppCachePath.exists())
				{
					// Create the cache path on the external storage
					isCachePathAvailable = extStorageAppCachePath.mkdirs();
				}

				if (!isCachePathAvailable)
				{
					// Unable to create the cache path
					extStorageAppCachePath = null;
				}
			}
		}
	}

	@Override
	public File getCacheDir()
	{
		// NOTE: this method is used in Android 2.2 and higher

		if (extStorageAppCachePath != null)
		{
			// Use the external storage for the cache
			return extStorageAppCachePath;
		}
		else
		{
			// /data/data/com.devahead.androidwebviewcacheonsd/cache
			return super.getCacheDir();
		}
	}
}

이런 class를 하나 만들어 추가해준다.

웹뷰를 사용하는 액티비티 클래스에서

@Override
	public File getCacheDir()
	{
		// NOTE: this method is used in Android 2.1

		return getApplicationContext().getCacheDir();
	}

함수를 하나 추가해 준다

그리고 Androidmenifest.xml에다가 아래와 같이 추가해준다.

<application
	android:icon="@drawable/ic_launcher"
	android:label="@string/app_name"
	android:name="com.devahead.androidwebviewcacheonsd.ApplicationExt">
<activity
	android:name=".MainActivity"
	android:label="@string/app_name">

이 코드를 쓰면 웹브라우징 도중에 SD메모리가 빠진다던지 캐시클리어 명령이 안먹는다던지 뭐 자잘하게 문제가 생길 수 있다

그건 당신이 알아서 예외 처리 해야 한다고 함.
출처: http://www.devahead.com/blog/2012/01/saving-the-android-webview-cache-on-the-sd-card/


Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다