實驗: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
中引用這個配置文件:<applicationandroid:networkSecurityConfig="@xml/network_security_config"...>... </application>
?請注意,允許明文HTTP傳輸可能會使您的應用和用戶的數據面臨中間人攻擊的風險,因此推薦盡可能使用HTTPS
實驗小結
該實驗代碼已經上傳到GitHub,也已經同步到同名博客中。
寫在最后:
兩眼一睜就又是新的實驗報告,深刻懷疑實驗報告會自己分裂…