实验:Android网络连接
文章目录
- 实验:Android网络连接
- @[toc]
- 实验目标和实验内容:
- 1、掌握Android联网的基本概念;
- 2、能够使用URL connection实现网络连接;
- 3、掌握第三方库的基本概念
- 4、需实现的具体功能
- 实验结果
- 功能说明与核心代码
- HTTPRrequestActivity.java文件结构:
- StreamMediaActivity.java文件结构:
- 实验过程
- 1.网页请求
- 原生方式(使用HttpURLConnection)
- 第三方库方法(使用OkHttpClient):
- 2.图片请求
- 原生方式(使用HttpURLConnection):
- 第三方库方法(使用OkHttpClient):
- 3.流媒体
- 原生方式(使用VideoView):
- 第三方库方法(使用ExoPlayer):
- 问题及解决
- 实验小结
文章目录
- 实验:Android网络连接
- @[toc]
- 实验目标和实验内容:
- 1、掌握Android联网的基本概念;
- 2、能够使用URL connection实现网络连接;
- 3、掌握第三方库的基本概念
- 4、需实现的具体功能
- 实验结果
- 功能说明与核心代码
- HTTPRrequestActivity.java文件结构:
- StreamMediaActivity.java文件结构:
- 实验过程
- 1.网页请求
- 原生方式(使用HttpURLConnection)
- 第三方库方法(使用OkHttpClient):
- 2.图片请求
- 原生方式(使用HttpURLConnection):
- 第三方库方法(使用OkHttpClient):
- 3.流媒体
- 原生方式(使用VideoView):
- 第三方库方法(使用ExoPlayer):
- 问题及解决
- 实验小结
实验目标和实验内容:
1、掌握Android联网的基本概念;
网络权限:
在 Android 应用中,需要在 AndroidManifest.xml 文件中声明网络权限,以允许应用访问网络。
常见的网络权限有 INTERNET 和 ACCESS_NETWORK_STATE。
网络请求:
Android 应用通常使用 HTTP 协议进行网络请求。可以使用 HttpURLConnection、OkHttp、Retrofit 等库来发送请求和接收响应。
异步处理:
由于网络请求可能会花费一些时间,通常需要在非主线程(如使用 AsyncTask、Thread、ExecutorService 或 Kotlin 的协程)中执行网络请求,以避免阻塞主线程导致应用无响应。
数据解析:
网络请求返回的数据通常是 JSON 或 XML 格式,需要使用 JSONObject、JSONArray、XMLPullParser 或第三方库(如 Gson、Jackson)进行解析。
2、能够使用URL connection实现网络连接;
3、掌握第三方库的基本概念
查看第三方官方文档,能实现基础的网络数据传输操作(文字、图片或流媒体)。在Android开发中,第三方库是指那些不是由Android框架直接提供的,而是由开发者社区、公司或个人开发者创建并维护的代码库。这些库旨在扩展Android的功能,提供额外的工具和组件,帮助开发者更高效地构建应用程序。
4、需实现的具体功能
网页请求,图片请求,实现流媒体。必须采用原生和第三方两种方式完成网络连接。请说明连接的url地址信息,AS需要添加的依赖包、以及关键的代码框架。(请注意,如果第三方库采用了非课程内容,需要介绍第三方库的官网地址以及发布者信息。
实验结果
功能说明与核心代码
HTTPRrequestActivity.java文件结构:
layout布局文件;
StreamMediaActivity.java文件结构:
layout文件布局:
实验过程
1.网页请求
原生方式(使用HttpURLConnection)
URL地址信息:可以使用任意公开的URL,例如 https://www.baidu.com
依赖包:无需额外依赖,使用Android SDK自带的HttpURLConnection。
关键代码框架:
运行结果截图:
第三方库方法(使用OkHttpClient):
URL地址信息:可以使用任意公开的URL,例如https://www.bilibili.com/
依赖包
// OkHttp3 依赖
implementation ‘com.squareup.okhttp3:okhttp:4.9.0’
关键代码框架:
运行结果截图:
2.图片请求
原生方式(使用HttpURLConnection):
URL地址信息:可以使用任意公开的URL,例如 https://gd-hbimg.huaban.com/747c8475499a917e165a162cff6e6df6fe33b0a845048-RrSpEc_fw658webp
依赖包:无需额外依赖,使用Android SDK自带的HttpURLConnection。
关键代码框架:
运行结果截图:
第三方库方法(使用OkHttpClient):
URL地址信息:可以使用任意公开的URL,例如https://gd-hbimg.huaban.com/e3019b5bd5a21a12b49cfb647f3af7932f56f08d15f3f-7iLeVE_fw240webp
依赖包:
// OkHttp3 依赖
implementation ‘com.squareup.okhttp3:okhttp:4.9.0’ // 请使用最新版本
关键代码框架:
运行结果截图:
3.流媒体
原生方式(使用VideoView):
URL地址信息:可以使用任意公开的URL,例如 http://vjs.zencdn.net/v/oceans.mp4。
依赖包:无需额外依赖,使用Android SDK自带的关键代码框架。它支持多种格式的视频文件,并且可以播放本地文件系统或网络上的视频文件。
关键代码框架:
运行结果截图;
第三方库方法(使用ExoPlayer):
URL地址信息:可以使用任意公开的URL,例如https://www.w3schools.com/html/movie.mp4
依赖包:
ExoPlayer是一个强大的第三方库,它提供了比原生VideoView更多的功能和更好的性能,特别是在播放自适应视频流时。它需要添加依赖并在项目中进行配置。
// ExoPlayer
implementation ‘com.google.android.exoplayer:exoplayer:2.18.5’ // Use the latest version
//ExoPlayer核心库
implementation ‘com.google.android.exoplayer:exoplayer-core:2.18.5’
关键代码框架:
运行结果截图;
问题及解决
[!NOTE]
问题出现:
在使用ExoPlayer播放视频时可能遇到了一个
ExoPlaybackException
异常,具体原因是HttpDataSource$CleartextNotPermittedException
,这表明应用尝试通过非加密的HTTP协议访问网络资源,但Android系统出于安全考虑,不允许这种明文传输。问题解决:
配置网络安全配置文件:可以在应用的
res/xml
目录下创建或修改network_security_config.xml
文件,允许特定的域名使用HTTP。例如:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">www.w3school.com.cn</domain> </domain-config> </network-security-config>
然后,在
AndroidManifest.xml
中引用这个配置文件:<application android:networkSecurityConfig="@xml/network_security_config" ...> ... </application>
‼请注意,允许明文HTTP传输可能会使您的应用和用户的数据面临中间人攻击的风险,因此推荐尽可能使用HTTPS
实验小结
该实验代码已经上传到GitHub,也已经同步到同名博客中。
写在最后:
两眼一睁就又是新的实验报告,深刻怀疑实验报告会自己分裂…