private void downloadImage(String imageUrl) throws InterruptedException {
InputStream inputStream = null;
OutputStream outStream = null;
try {
URL url = new URL(/blog_article/imageUrl/index.html);
inputStream = url.openStream();
String filepath = getFilePath(imageUrl);
String filename = getFileName(imageUrl);
File imageDirectory = new File(filepath);
File file = new File(filepath + filename);
if (file.exists() == false) {
String path = imageDirectory.toString().toLowerCase();
String name = imageDirectory.getName().toLowerCase();
ContentValues values = new ContentValues(7);
values.put(Images.Media.TITLE, filename);
values.put(Images.Media.DISPLAY_NAME, filename);
values.put(Images.Media.DATE_TAKEN, new Date().getTime());
values.put(Images.Media.MIME_TYPE, "image/jpeg");
values.put(Images.ImageColumns.BUCKET_ID, path.hashCode());
values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, name);
values.put("_data", filepath + filename);
ContentResolver contentResolver = getApplicationContext().getContentResolver();
Uri uri = contentResolver.insert(Images.Media.EXTERNAL_CONTENT_URI, values);
outStream = contentResolver.openOutputStream(uri);
byte[] buffer = new byte[1024];
int count;
while ((count = inputStream.read(buffer)) != -1) {
if (Thread.interrupted() == true) {
String functionName = Thread.currentThread().getStackTrace()[2].getMethodName() + "()";
throw new InterruptedException("The function " + functionName + " was interrupted.");
}
outStream.write(buffer, 0, count);
}
}
}
catch (IOException e) {
}
finally {
if (inputStream != null) {
try {
inputStream.close();
}
catch (IOException e) {
}
}
if (outStream != null) {
try {
outStream.close();
}
catch (IOException e) {
}
}
}
}
2.
final int CHOOSE_AN_IMAGE_REQUEST = 2910;
String directory = "/sdcard/someDirectory/";
Uri uri = Images.Media.INTERNAL_CONTENT_URI.buildUpon().appendQueryParameter("bucketId", getBucketId(directory)).build();
Intent intent = getIntent();
intent.setData(uri);
intent.setAction(Intent.ACTION_PICK);
startActivityForResult(Intent.createChooser(intent, "Choose a Viewer"), CHOOSE_AN_IMAGE_REQUEST);
public static String getBucketId(String bucketName) {
bucketName = bucketName.toLowerCase();
if (bucketName.charAt(bucketName.length() - 1) == '/') {
bucketName = bucketName.substring(0, bucketName.length() - 1);
}
return Integer.toString(bucketName.hashCode());
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == CHOOSE_AN_IMAGE_REQUEST) {
Uri chosenImageUri = data.getData();
...
}
}
}
注:wap2.0其实现方式是使用xhtml语言进行页面显示,所以在wap2.0开发的过程中只要遵循xhtml开发规范即可。
一、XHTML标准文档结构
1、<?xml version="1.0" encoding="utf-8" ?>
<?xml ?>标签在XHTML文档中不是必须的,但W3C极力鼓励使用这个标签,以表明文档是基于XML的,特别是文档编码不是utf-8或utf-8的情况下要使用此标签说明字符编码。version-必须属性。设置XML的版本,对于XHTML文档设置为1.0,encoding-指出文档的字符的编码集,缺省默认为utf-8或utf-8(有赖于浏览器)
2、 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
说明文档的类型。表明XHTML或者HTML遵从的语法定义是什么,以便浏览器知道,并读取类型定义。DOCTYPE声明不是XHTML文档的一部分,它也不是文档的一个元素,所以我们没必要加上结束标签。XHTML 1.0 提供了三种DTD(document type defnition)声明可供选择:Transitional(过渡的):要求非常宽松的DTD,它允许你继续使用HTML4.01的标识(但是要符合xhtml的写法)。Strict(严格的):要求严格的DTD,你不能使用任何表现层的标识和属性。Frameset(框架的):专门针对框架页面设计使用的DTD,如果你的页面中包含有框架,需要采用这种DTD。第二个URL参数即是这个DTD的下载地址,它定义了XHTML文档的标签和语法,浏览器就根据你定义的DTD来解释文档中的标识,并展现出来。我们可以将标准的DTD下载到自己的服务器,或定义自己的DTD。
3、<html xmlns="http://www.w3c.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN">
XHTML网页规定文档必须包含此根元素,用它来包含所有的后继元素。xmlns - 在XTHML文件中为必须属性;用来声明名字空间,XTHML1.0值为:http://www.w3c.org/1999/xhtml
xml:lang - 当文档解释为XML文档时声明此文档的国家语言代码
lang - 当文档解释为HTML时指出国家语言代码
xml:lang与lang属性应同时使用,当网页文档解释为XML时xml:lang属性优先,网页解释为HTML时lang属性起作用。关于此属性详见:网页语言代码与SEO。
一个标准的XHTML文档声明如上,总结就是:要通过某个正式的W3C XHTML DTD验证;根元素必须是<html>;根元素必须用xmlns属性指出名字空间;根元素前必须有<!DOCTYPE>元素。其它标签XHTML和HTML区别不大,只是更严格,详情如下。
二、XHTML与HTML的区别
1,属性值必须有引号;属性不可以缩写;属性值中使用&号 &必须表示为实体引用;
2,用id属性代替name属性。如<a>定义锚点,HTML是用name,XTHM主张用id来定义
3,XHTML的元素和属性都要小写:XHTML文档是XML应用程序,XML对大小写是敏感的
4,元素必须关闭:如</p>在XHTML不能省略,<br />也要有结束标记,W3C建议在/之前空一个格
5,没有排斥规则。如<a>中可以嵌套<a>,当然我们不应那样做
6,正确的组织和嵌套形式:如必须有<html>标签;元素的嵌套要一一对应,不能错位
一个最基本的XHTML标准文档格式模板如下
其中关于meta部分的说明请看HTML meta 标签用法。
<?xml version="1.0" encoding="utf-8"?>
<!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="zh" lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="keywords" content="..." />
<meta name="description" content="..." />
<title>...</title>
</head>
<body>
...
</body>
</html>
I've been using the code below to decode the XML. Not pretty. but it
gives you a summary of the XML. It should be cleaned up, but I haven't
had the time to do that yet. I was hoping if I put it here someone
else might like clean it up.
The code will load (and decode!) all XML resources in an application,
and display them on the log.
Resources r2; r2 = this.getPackageManager().getResourcesForApplication("com.google.android.con tacts"); int start = R.layout.main; while (true) { XmlPullParser xpp = r2.getXml(start); start++; eventType = xpp.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if(eventType == XmlPullParser.START_DOCUMENT) { Log.w(LOG_TAG, "Start document"); } else if(eventType == XmlPullParser.END_DOCUMENT) { Log.w(LOG_TAG, "End document"); } else if(eventType == XmlPullParser.START_TAG) { int count = xpp.getAttributeCount(); String tag = "<" +xpp.getName(); for (int i = 0 ; i <count; ++i) { String attrNS= xpp.getAttributeNamespace(i); String attrName = xpp.getAttributeName(i); if (attrNS !=null) { attrName = attrNS + ":" + attrName; } String value = xpp.getAttributeValue(i); tag += " " + attrName + "=\"" + value +"\""; Log.w(LOG_TAG,tag); tag = ""; } tag += ">"; Log.w(LOG_TAG, tag); } else if(eventType == XmlPullParser.END_TAG) { Log.w(LOG_TAG, "</"+xpp.getName() + ">"); } else if(eventType ==XmlPullParser.TEXT) { Log.w(LOG_TAG, xpp.getText()); } else { Log.w(LOG_TAG,"Something else: " + eventType); } eventType = xpp.next(); } Log.w(LOG_TAG, "DONE"); }
If you do something with this, I'd be really keen to hear about it.