webview)ページにローカルjsとcrc(二)をロードします.

4957 ワード

content://の形でjavascriptがドメインをまたぐ問題がありますので、たとえjsファイルをロードして成功しても、実行できません.あるいはドメインをまたぐ問題を解決する必要があります.面倒くさいので、諦めました.私たちは今もこの案を使っていません.しかし、画像をロードするのは全然問題がないです.
同じwebviewを使って開発した兄弟達に助けを与えたいです.皆さんはwebviewの開発技術について何かもっといいものがありますか?
↑↑↑↑↑↑↑↑↑先は上を見て、上を見終わるかもしれません.このようなプランは必要ないと思います.
↑↑↑↑↑↑↑↑↑↑==================================================================================
前回のwebviewに続き、ローカルjsとcrcをロードします.
最近また新たな進展がありました.
まず、ウェブページで携帯電話のローカルリソースをロードすることを実現します.
如きcontent://com.andych008.demo.webview/girl_sd.gifというlinkは、携帯電話のローカルなgirl gauをhtmlに表示します.sd.gifという写真、
ガールズについてsd.gifという写真の位置は、次の位置から順に探してみます.見つけたら開けます.
//sdcard/andych 008/
//data/data/comp.andych 008 demo.webview/andych 008/
appk:asets/
もちろん、どこから開くかを指定してもいいです.
以下はコード実現です.
public class LocalFileContentProvider extends ContentProvider {
	
	private static final String URI_PREFIX = "content://com.andych008.demo.webview";
	
	@Override
	public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
		
		Log.e("path1:", uri.getPath());
		File file = new File(uri.getPath());
		ParcelFileDescriptor parcel = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
		return parcel;
	    
	}
	
	@Override
	public AssetFileDescriptor openAssetFile (Uri uri, String mode) throws FileNotFoundException{
        AssetManager am = getContext().getAssets();  
        String path = uri.getPath().substring(1);  
        Log.e("path:", path);
        
        //sdcard    
        String tpath = "/sdcard/andych008/"+path;
        File file = new File(tpath);
		if (file.exists()) {
			Log.e("path2:", tpath);
			Uri turi = Uri.parse(URI_PREFIX+tpath);
			return super.openAssetFile(turi, mode);
		}
		
		//C    
		tpath = "/data/data/com.andych008.demo.webview/andych008/"+path;
		file = new File(tpath);
		if (file.exists()) {
			Log.e("path2:", tpath);
			Uri turi = Uri.parse(URI_PREFIX+tpath);
			return super.openAssetFile(turi, mode);
		}
		
		try {
			AssetFileDescriptor afd = am.openFd(path);
			return afd;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        return super.openAssetFile(uri, mode);
	}

	@Override
	public boolean onCreate() {
		return true;
	}

	@Override
	public int delete(Uri uri, String s, String[] as) {
		throw new UnsupportedOperationException("Not supported by this provider");
	}

	@Override
	public String getType(Uri uri) {
		throw new UnsupportedOperationException("Not supported by this provider");
	}

	@Override
	public Uri insert(Uri uri, ContentValues contentvalues) {
		throw new UnsupportedOperationException("Not supported by this provider");
	}

	@Override
	public Cursor query(Uri uri, String[] as, String s, String[] as1, String s1) {
		throw new UnsupportedOperationException("Not supported by this provider");
	}

	@Override
	public int update(Uri uri, ContentValues contentvalues, String s, String[] as) {
		throw new UnsupportedOperationException("Not supported by this provider");
	}

}
ファイル
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0" />
<title>Insert title here</title>
<link type="text/css" rel="stylesheet" href="1.css">
<script type="text/javascript" charset="utf-8" src="1.js"></script>

</head>
<body>sd    html  
<hr />
<hr />
<button onclick="showNote('andy')">showNote</button>
    
<img src="girl_sd.gif" alt="    ">
<hr />
sd  
<img src="content://com.andych008.demo.webview/girl_sd.gif" alt="sd  ">
<hr />
c  
<img src="content://com.andych008.demo.webview/girl_c.gif" alt="c  ">
<hr />
asset  
<img src="content://com.andych008.demo.webview/1/girl.gif" alt="a  ">
<hr />
    
<img src="content://com.andych008.demo.webview/sdcard/andych008/girl_sd.gif" alt="a  ">
</body>

</html>
以下のファイルが存在することを要求します.
//sdcard/andych 008/girl_sd.gif
//data/data/comp.andych 008 demo.webview/andych 008/girl_c.gif
appk:asets/1/girl.gif
//data/data下の書類はこのようにcpで入ることができます.(携帯電話はRootが通っています.)または自分でプログラムを通して文書を作成します.
adb push girl_c.gif "/data/data/com.andych008.demo.webview/andych008/girl_c.gif"
s
s
s