![Android智能穿戴设备开发实战详解](https://wfqqreader-1252317822.image.myqcloud.com/cover/166/31729166/b_31729166.jpg)
4.5 URL数据的处理方法
随着互联网的普及和发展,上网浏览信息已经成为了人们生活中非常重要的一部分。作为一款智能穿戴设备也需要具备网络访问功能,例如谷歌眼镜和三星手表都具有上网功能。在现实应用中,网络访问功能离不开URL的支持。URL是一个地址,是我们访问Web页面的地址。基于URL的重要性,所以本书将用一章节的内容来讲解在Android穿戴设备中处理URL数据的基本知识。希望读者仔细品味,为步入本书后面知识的学习打下基础。
4.5.1 URL和URLConnection
URL(Uniform Resource Locator)对象代表统一资源定位器,是指向互联网“资源”的指针。这里的资源可以是简单的文件或目录,也可以是对更为复杂的对象引用,例如对数据库或搜索引擎的查询。通常情况下,URL可以由协议名、主机、端口和资源组成,满足如下所示的格式。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00106002.jpg?sign=1739042808-HjeaDakLzWShCWgo7CfjnstPuqD1EtmU-0-fe4f5f46b834ffb7d4e2cf40dfc04a7c)
例如下面就是一个合法的URL地址。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00106003.jpg?sign=1739042808-zHhaJlFY2BSOSuq7TmLtvfsMvyeslTDc-0-b74c86dd571235ae7dc091ae0def91f8)
在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连接的处理。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00107001.jpg?sign=1739042808-7c1JevaLCWEtkac6GxKjfDfW3t9R0DIA-0-2de618a0c6d4056325093cd19e8fe95c)
本实例的具体实现流程如下所示。
(1)编写布局文件main.xml,在里面插入了一个Gallery控件来实现滑动相簿功能。
(2)编写主程序文件QQ.java,其具体实现流程如下所示。
● 分别声明在Gallery中要显示的五幅图片的地址栏字符串。
● 引入布局文件main.xml,定义类成员myContext Context对象,然后设置只有一个参数C的构造器。具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00107002.jpg?sign=1739042808-i4oyQkbkhNoOUt6xvYzazRNXEBl68l9k-0-5b6477cc5bc45e53eecd6ee909ffda9c)
● 定义方法getCount()来返回全部已定义图片的总量,定义方法getItem(int position)获取当前容器中图像数的数组ID。具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00108001.jpg?sign=1739042808-BKUWM70TylkaH0FP4XnmoU5Q4ab3Cb24-0-17dd4df2debd9621f55a0f540e0bb8ba)
● 定义方法getScale,利用getScale根据中央位移量返回views的大小。具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00108002.jpg?sign=1739042808-8YwkLhLImbLVbNVHSVMe1oJCElbEoAXm-0-c8849022cda09be586a27e6598a0bfdf)
执行后将在Gallery中显示指定的图片,如图4-10所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00108003.jpg?sign=1739042808-IBRZtNXNYW6cgSWzhkx16dSlirEnRwZb-0-45a74681a519c78cab321913539c5336)
图4-10 显示指定的照片
4.5.3 充分利用网络资源
在现实应用中,可以从网络中下载一个图片文件来作为穿戴设备屏幕的背景。在本实例中,可以远程获取网络中的一幅图片,并将这幅图片作为手机屏幕的背景。当下载图片完成后,通过InputStream传到ContextWrapper中重写setWallpaper的方式实现的。其中传入的参数是其中传入的参数是URCConection.getInputStream()中的数据内容。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00108004.jpg?sign=1739042808-bCApCEGQEEphsqjPZDYdKIW1kPF3N3rn-0-2d82cac56610d9a57b30ae480d609c89)
本实例的具体实现流程如下所示。
(1)编写布局文件main.xml,分别插入一个文本框控件和按钮控件。
(2)编写主程序文件pingmu.java,其具体实现流程如下所示。
● 单击mButton1按钮时通过mButton1.setOnClickListener来预览图片,如果网址为空则输出空白提示,如果不为空则传入“type=1”表示预览图片。具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00109001.jpg?sign=1739042808-JGvicOxEdV2D3BDNA39JZwSGjYI8vOHA-0-cd8c48fd0c21abe6bd3ae360a7e011a6)
● 单击mButton2按钮时通过mButton2.setOnClickListener将图片设置为桌面。如果网址为空则输出空白提示,如果不为空则传入“type=2”将其设置为桌面。具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00109002.jpg?sign=1739042808-Wzzzkndd1opxEJ874OtjscnWPQlT7aOp-0-4dad948544923097387f8cd29c6eedfd)
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00110001.jpg?sign=1739042808-mLsuprK9hGpkshqVVuAFyjXgTvLZsCRv-0-0d013d803c8d59d758b17bfa4a02f896)
● 定义方法setImage(String path,int type)将图片抓取预览或并设置为桌面,如果有异常则输出对应提示。具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00110002.jpg?sign=1739042808-FEMvs6wC6A3i8CC3KknOapjUJJgaus0n-0-e6e634a138b25654f69f48f82f133aa8)
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00111001.jpg?sign=1739042808-tSaECkdNBzzzLjWNDts7i4wiOjvvCRKb-0-144df591b3b579be8601943a94d217c8)
● 定义方法showDialog(String mess)来弹出一个对话框,单击后完成背景设置。具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00111002.jpg?sign=1739042808-3fxZFurhIaISbmOLYtr5hbaqnX1QaBl3-0-91f9761d781ab560a9aa3c7c690c6eeb)
(3)在文件droidManifest.xml中需要声明T_WALLPAPER权限和INTERNET权限,主要代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00111003.jpg?sign=1739042808-zYZpU8vFuxpTnBTondnESd5lvFJjOR9Z-0-9462322b51d28c29df63a7f7f37a4f66)
执行后在屏幕中显示一个输入框和两个按钮,输入图片网址并单击“预览”按钮后,可以查看此图片,如图4-11所示。单击“设置”按钮后可以将此图片设置为屏幕背景。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00111004.jpg?sign=1739042808-ebDefQX5wUwhSms3K3513TkHgl03bG6C-0-c2d1bb018b8dd97cf4f531e90761dec7)
图4-11 初始效果
4.5.4 将穿戴设备打造成一个网页浏览器
在java.net类中,HttpURLConnection类是一种访问HTTP资源的方式,此类具有完全的访问能力,完全可以取代HttpGet类和HttpPost类。在日常应用中,当使用穿戴设备浏览网页时,可以使用HttpURLConnection来获取获取某一个网页的内容。在本实例中,当在编辑框中输入网址并单击“显示网页”按钮后会获取编辑框中的网址,然后打开HttpURLConnection连接并获取输入流,接下来将返回的流保存为“.html”格式的文件,然后再用WebView将HTML文件显示出来。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00112001.jpg?sign=1739042808-zeRkM1S7XrSiXJ17ICIpesEF05NxDpfD-0-3d72ba96c225a1daf4f56614ee7bd3e1)
编写主程序文件GetHtml.java,在方法getStaticPageByBytes()中通过HttpURLConnection来获取某一个网页的内容。文件GetHtml.java的具体实现代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00112002.jpg?sign=1739042808-ukPOiqnQhvwoSmuvJAqQfkN6U7SZpKjQ-0-d41c0e5d926e8f3ce245f57d6429590b)
执行之后的效果如图4-12所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00113002.jpg?sign=1739042808-RZ85tCkmvvKJR8qSIGfpdXuXgouYAUK5-0-50c9d319371f996f5fc24572348df849)
图4-12 执行效果