IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 安卓案例:利用URLConnection下载音乐 -> 正文阅读

[移动开发]安卓案例:利用URLConnection下载音乐

一、安卓网络编程

在这里插入图片描述

二、运行效果

  • 输入音乐网址,下载并播放音乐
    在这里插入图片描述

三、涉及知识点

  1. 线性布局(LinearLayout)
  2. 媒体播放器(MediaPlayer)
  3. 文本编辑框(EditText)
  4. 按钮(Button)
  5. 网址连接类(URLConnection)
  6. 异步任务(AsyncTask)
    在这里插入图片描述

四、实现步骤

(一)创建安卓应用

  • 基于Empty Activity创建安卓应用 - DownloadMusicPageByURLConnection
    在这里插入图片描述
    在这里插入图片描述

(二)准备图片素材

  • 将背景图片拷贝到mipmap-xhdpi目录
    在这里插入图片描述

(三)主布局资源文件

  • 主布局资源文件 - main_activity.xml
    在这里插入图片描述
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@mipmap/background"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="10dp">

    <EditText
        android:id="@+id/edtMusicUrl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/input_music_url"
        android:lines="3" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:gravity="center"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btnDownload"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:onClick="doDownload"
            android:text="@string/download"
            android:textSize="20sp" />

        <Button
            android:id="@+id/btnPlay"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:onClick="doPlay"
            android:text="@string/play"
            android:textSize="20sp" />

        <Button
            android:id="@+id/btnClear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:onClick="doClear"
            android:text="@string/clear"
            android:textSize="20sp" />
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#bbbbbb" />

    <ProgressBar
        android:id="@+id/pbDownloadMusic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone" />
</LinearLayout>

(四)字符串资源文件

  • 字符串资源文件 - strings.xml
    在这里插入图片描述
<resources>
    <string name="app_name">利用URLConnection下载音乐</string>
    <string name="download">下载</string>
    <string name="input_music_url">输入音乐网址</string>
    <string name="play">播放</string>
    <string name="clear">清空</string>
</resources>

(五)授权访问因特网与读写外置存储卡

  • 在安卓项目清单文件里授权访问因特网与读写外置存储卡
    在这里插入图片描述

(六)在主界面里实现功能

  • 主界面 - MainActivity
    在这里插入图片描述

1、声明变量,获取控件实例

  • 声明件变量,然后获取控件实例
    在这里插入图片描述

2、请求读写外置存储卡权限

  • 检查是否读写权限,如果没有,那么就请求读写权限
    在这里插入图片描述

3、创建下载资源的异步任务类

  • 在MainActivity里继承AsyncTask创建DownloadTask
    在这里插入图片描述
/**                                                                                                          
 * 下载资源的异步任务                                                                                                 
 */                                                                                                          
private class DownloadTask extends AsyncTask<String, Void, Void> {                                           
    @Override                                                                                                
    protected void onPreExecute() {                                                                          
        super.onPreExecute();                                                                                
        // 让进度条可见                                                                                            
        pbDownloadMusic.setVisibility(View.VISIBLE);                                                         
    }                                                                                                        
                                                                                                             
    @Override                                                                                                
    protected Void doInBackground(String... params) {                                                        
        // 获取音乐网址字符串                                                                                         
        String strMusicUrl = params[0];                                                                      
        try {                                                                                                
            // 创建URL对象(空格要转换成%20才能识别)                                                                        
            URL url = new URL(strMusicUrl.replace(" ", "%20"));                                              
            // 获取URL连接                                                                                       
            URLConnection connection = url.openConnection();                                                 
            // 获取字节输入流                                                                                       
            InputStream is = connection.getInputStream();                                                    
            // 定义音乐下载目录                                                                                      
            downloadDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);    
            // 获取音乐文件名                                                                                       
            musicName = strMusicUrl.substring(strMusicUrl.lastIndexOf("/") + 1);                             
            // 创建文件字节输出流                                                                                     
            FileOutputStream fos = new FileOutputStream(downloadDir.getAbsolutePath() + "/" + musicName);    
            // 定义字节缓冲区                                                                                       
            byte[] buffer = new byte[1024];                                                                  
            // 读取字节输入流                                                                                       
            int len = 0;                                                                                     
            while ((len = is.read(buffer)) != -1) {                                                          
                // 将读取的数据写入目标文件                                                                              
                fos.write(buffer, 0, len);                                                                   
            }                                                                                                
            // 关闭输出流                                                                                         
            fos.close();                                                                                     
            // 关闭输入流                                                                                         
            is.close();                                                                                      
        } catch (MalformedURLException e) {                                                                  
            e.printStackTrace();                                                                             
        } catch (IOException e) {                                                                            
            e.printStackTrace();                                                                             
        }                                                                                                    
        return null;                                                                                         
    }                                                                                                        
                                                                                                             
    @Override                                                                                                
    protected void onPostExecute(Void unused) {                                                              
        super.onPostExecute(unused);                                                                         
        // 让进度条消失                                                                                            
        pbDownloadMusic.setVisibility(View.GONE);                                                            
        // 提示用户下载成功                                                                                          
        Toast.makeText(MainActivity.this, "恭喜,音乐文件下载成功!", Toast.LENGTH_SHORT).show();                        
    }                                                                                                        
}                                                                                                                                                                                                                                                                                                

4、编写下载按钮单击事件处理方法

  • 编写doDownload(View view)方法
    在这里插入图片描述
/**                                                                                        
 * 下载按钮单击事件处理方法                                                                            
 *                                                                                         
 * @param view                                                                             
 */                                                                                        
public void doDownload(View view) {                                                        
    // 获取音乐网址字符串                                                                           
    String strMusicUrl = edtMusicUrl.getText().toString();                                 
    if (strMusicUrl.equals("")) {                                                          
        Toast.makeText(this, "请输入音乐网址!", Toast.LENGTH_SHORT).show();                       
        return;                                                                            
    }                                                                                      
    // 创建下载任务                                                                              
    DownloadTask task = new DownloadTask();                                                
    // 执行下载任务,传入音乐网址                                                                       
    task.execute(strMusicUrl);                                                             
}                                                                                                                                                                                                                                            

5、编写播放按钮单击事件处理方法

  • 编写doPlay(View view)方法
    在这里插入图片描述
/**                                                                                                            
 * 播放按钮单击事件处理方法                                                                                                
 *                                                                                                             
 * @param view                                                                                                 
 */                                                                                                            
public void doPlay(View view) {                                                                                
    // 用户先点击了下载按钮                                                                                              
    if (downloadDir != null && musicName != null) {                                                            
        try {                                                                                                  
            // 重置媒体播放器                                                                                         
            mp.reset();                                                                                        
            // 设置媒体播放器的数据源                                                                                     
            mp.setDataSource(downloadDir.getAbsolutePath() + "/" + musicName);                                 
            // 加载音乐文件到内存                                                                                       
            mp.prepare();                                                                                      
            // 播放音乐文件                                                                                          
            mp.start();                                                                                        
            // 提示用户                                                                                            
            Toast.makeText(this, "开始播放……", Toast.LENGTH_SHORT).show();                                         
        } catch (Exception e) {                                                                                
            Toast.makeText(MainActivity.this, "音乐播放失败!", Toast.LENGTH_SHORT).show();                           
        }                                                                                                      
    } else {                                                                                                   
        Toast.makeText(this, "请先下载音乐文件!", Toast.LENGTH_SHORT).show();                                          
    }                                                                                                          
}                                                                                                              

6、编写清空按钮单击事件处理方法

  • 编写doClear(View view)方法
    在这里插入图片描述
/**                                                     
 * 清空按钮单击事件处理方法                                         
 *                                                      
 * @param view                                          
 */                                                     
public void doClear(View view) {                        
    // 清空音乐网址文本框                                        
    edtMusicUrl.setText("");                            
}                                                                            

(七)Tomcat服务器上放置音乐文件

  • webapps里创建music目录,放置一首mp3音乐文件 - Terra.mp3
    在这里插入图片描述

(八)启动Tomcat服务

  • 双击Tomcat的bin目录里的startup.bat批处理文件图标
    在这里插入图片描述

  • 查看本机IP地址:192.168.129.112
    在这里插入图片描述

(九)运行程序,查看结果

  • 输入音乐网址,下载并播放音乐
    在这里插入图片描述
  • 查看下载的音乐文件 - /mnt/sdcard/Download/Terra.mp3
    在这里插入图片描述
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:40:09  更:2022-07-21 21:40:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 3:52:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码