4.5 URL数据的处理方法
随着互联网的普及和发展,上网浏览信息已经成为了人们生活中非常重要的一部分。作为一款智能穿戴设备也需要具备网络访问功能,例如谷歌眼镜和三星手表都具有上网功能。在现实应用中,网络访问功能离不开URL的支持。URL是一个地址,是我们访问Web页面的地址。基于URL的重要性,所以本书将用一章节的内容来讲解在Android穿戴设备中处理URL数据的基本知识。希望读者仔细品味,为步入本书后面知识的学习打下基础。
4.5.1 URL和URLConnection
URL(Uniform Resource Locator)对象代表统一资源定位器,是指向互联网“资源”的指针。这里的资源可以是简单的文件或目录,也可以是对更为复杂的对象引用,例如对数据库或搜索引擎的查询。通常情况下,URL可以由协议名、主机、端口和资源组成,满足如下所示的格式。
例如下面就是一个合法的URL地址。
在Android系统中可以通过URL获取网络资源,其中的URLConnection和HTTPURL-Connection是最为常用的两种方式。
在JDK中还提供了一个URI(Uniform Resource Identifiers)类,其实例代表一个统一资源标识符,Java的URI不能用于定位任何资源,它的唯一作用就是解析。与此对应的是,URL则包含一个可打开到达该资源的输入流,因此我们可以将URL理解成URI的特例。
在URL类中,提供了多个可以创建URL对象的构造器,一旦获得了URL对象之后,可以调用下面的方法来访问该URL对应的资源。
● String getFile():获取此URL的资源名。
● String getHost():获取此URL的主机名。
● String getPath():获取此URL的路径部分。
● int getPort():获取此URL的端口号。
● String getProtocol():获取此URL的协议名称。
● String getQuery():获取此URL的查询字符串部分。
● URLConnection openConnection():返回一个URLConnection对象,它表示到URL所引用的远程对象的连接。
● InputStream openStream():打开与此URL的连接,并返回一个用于读取该URL资源的InputStream。
4.5.2 让穿戴设备和社交软件相结合
在现实网络应用中,可以在QQ空间中上传并保存照片。在本穿戴设备应用实例中,通过Gallery显示了QQ空间中的照片,这样可以节省手机的存储空间。在具体实现上,需要将URL网址的照片实时处理下载后,以InputStream转换为Bitmap,这样才能放入BaseAdapter中取用。在运行实例前,需要预先准备照片并上传到网络空间中,在获取照片的连接后,再以String数组方式放在程序中,并对BaseAdapter稍作修改,加上URL对象的访问以及URLConnection连接的处理。
本实例的具体实现流程如下所示。
(1)编写布局文件main.xml,在里面插入了一个Gallery控件来实现滑动相簿功能。
(2)编写主程序文件QQ.java,其具体实现流程如下所示。
● 分别声明在Gallery中要显示的五幅图片的地址栏字符串。
● 引入布局文件main.xml,定义类成员myContext Context对象,然后设置只有一个参数C的构造器。具体代码如下所示。
● 定义方法getCount()来返回全部已定义图片的总量,定义方法getItem(int position)获取当前容器中图像数的数组ID。具体代码如下所示。
● 定义方法getScale,利用getScale根据中央位移量返回views的大小。具体代码如下所示。
执行后将在Gallery中显示指定的图片,如图4-10所示。
图4-10 显示指定的照片
4.5.3 充分利用网络资源
在现实应用中,可以从网络中下载一个图片文件来作为穿戴设备屏幕的背景。在本实例中,可以远程获取网络中的一幅图片,并将这幅图片作为手机屏幕的背景。当下载图片完成后,通过InputStream传到ContextWrapper中重写setWallpaper的方式实现的。其中传入的参数是其中传入的参数是URCConection.getInputStream()中的数据内容。
本实例的具体实现流程如下所示。
(1)编写布局文件main.xml,分别插入一个文本框控件和按钮控件。
(2)编写主程序文件pingmu.java,其具体实现流程如下所示。
● 单击mButton1按钮时通过mButton1.setOnClickListener来预览图片,如果网址为空则输出空白提示,如果不为空则传入“type=1”表示预览图片。具体代码如下所示。
● 单击mButton2按钮时通过mButton2.setOnClickListener将图片设置为桌面。如果网址为空则输出空白提示,如果不为空则传入“type=2”将其设置为桌面。具体代码如下所示。
● 定义方法setImage(String path,int type)将图片抓取预览或并设置为桌面,如果有异常则输出对应提示。具体代码如下所示。
● 定义方法showDialog(String mess)来弹出一个对话框,单击后完成背景设置。具体代码如下所示。
(3)在文件droidManifest.xml中需要声明T_WALLPAPER权限和INTERNET权限,主要代码如下所示。
执行后在屏幕中显示一个输入框和两个按钮,输入图片网址并单击“预览”按钮后,可以查看此图片,如图4-11所示。单击“设置”按钮后可以将此图片设置为屏幕背景。
图4-11 初始效果
4.5.4 将穿戴设备打造成一个网页浏览器
在java.net类中,HttpURLConnection类是一种访问HTTP资源的方式,此类具有完全的访问能力,完全可以取代HttpGet类和HttpPost类。在日常应用中,当使用穿戴设备浏览网页时,可以使用HttpURLConnection来获取获取某一个网页的内容。在本实例中,当在编辑框中输入网址并单击“显示网页”按钮后会获取编辑框中的网址,然后打开HttpURLConnection连接并获取输入流,接下来将返回的流保存为“.html”格式的文件,然后再用WebView将HTML文件显示出来。
编写主程序文件GetHtml.java,在方法getStaticPageByBytes()中通过HttpURLConnection来获取某一个网页的内容。文件GetHtml.java的具体实现代码如下所示。
执行之后的效果如图4-12所示。
图4-12 执行效果