You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何开发Android应用远程获取PC特定文件夹音乐文件并播放

解决方案:Android远程获取电脑共享音乐文件

是否需要搭建服务器?

你已经通过XAMPP拥有了可用的HTTP服务器,不需要额外搭建新服务器;另外也可以利用已设置的文件夹共享,通过SMB协议直接访问,这种方式无需HTTP服务器。


方案一:利用现有XAMPP实现文件获取与播放

  1. 配置XAMPP访问音乐文件夹

    • 要么将目标音乐文件夹复制到XAMPP的htdocs目录下,要么修改Apache配置(httpd.conf或添加虚拟主机),将音乐文件夹设置为可通过Web访问。例如添加如下配置:
      Alias /music "D:/YourMusicFolder"
      <Directory "D:/YourMusicFolder">
          AllowOverride All
          Require all granted
      </Directory>
      
    • 重启XAMPP的Apache服务,确保通过http://电脑IP/music能访问到音乐文件列表。
  2. 编写PHP脚本返回音乐文件列表
    在XAMPP的htdocs目录下创建get_music.php,内容如下:

    <?php
    $musicDir = 'D:/YourMusicFolder'; // 替换为你的音乐文件夹绝对路径
    $allowedExts = ['mp3', 'flac', 'wav', 'm4a'];
    $fileList = [];
    
    if (is_dir($musicDir)) {
        foreach (scandir($musicDir) as $file) {
            if ($file === '.' || $file === '..') continue;
            $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
            if (in_array($ext, $allowedExts)) {
                $fileUrl = "http://{$_SERVER['SERVER_ADDR']}/music/" . urlencode($file);
                $fileList[] = ['name' => $file, 'url' => $fileUrl];
            }
        }
    }
    
    header('Content-Type: application/json');
    echo json_encode($fileList);
    ?>
    
  3. Android端实现逻辑

    • 使用OkHttp/Retrofit请求http://电脑IP/get_music.php,解析返回的JSON获取音乐文件的URL列表。
    • 用ExoPlayer或MediaPlayer加载对应的HTTP URL进行播放,示例代码片段:
      // 用ExoPlayer播放示例
      SimpleExoPlayer player = new SimpleExoPlayer.Builder(context).build();
      MediaItem mediaItem = MediaItem.fromUri("http://电脑IP/music/xxx.mp3");
      player.setMediaItem(mediaItem);
      player.prepare();
      player.play();
      

方案二:通过SMB协议直接访问共享文件夹

无需依赖HTTP服务器,直接利用Windows文件夹共享的SMB协议:

  1. 添加依赖
    在Android项目的build.gradle(Module级别)中添加SMB库依赖:

    implementation 'eu.agno3.jcifs:jcifs-ng:2.1.32'
    
  2. Android端访问SMB共享
    编写代码连接到共享文件夹,遍历并播放音乐文件:

    import jcifs.smb.NtlmPasswordAuthentication;
    import jcifs.smb.SmbFile;
    import jcifs.smb.SmbFileInputStream;
    
    // 示例代码
    String smbPath = "smb://192.168.x.x/你的共享文件夹名称/"; // 替换为电脑IP和共享文件夹名
    // 如果共享需要账号密码,传入对应的信息;无密码则留空用户名和密码
    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("", "共享用户名", "共享密码");
    SmbFile smbDir = new SmbFile(smbPath, auth);
    
    if (smbDir.exists() && smbDir.isDirectory()) {
        SmbFile[] files = smbDir.listFiles();
        for (SmbFile file : files) {
            String fileName = file.getName();
            String ext = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
            if (ext.equals("mp3") || ext.equals("flac") || ext.equals("wav")) {
                // 直接用SMB路径给播放器加载(部分播放器支持SMB协议)
                MediaItem mediaItem = MediaItem.fromUri(file.getUrl());
                // 后续用ExoPlayer/MediaPlayer播放逻辑同方案一
            }
        }
    }
    
  3. 权限配置
    在AndroidManifest.xml中添加必要权限:

    <uses-permission android:name="android.permission.INTERNET" />
    

    若为Android 10及以上,需注意播放器对SMB协议的兼容性,部分场景可能需要使用文件输入流的方式加载。


内容的提问来源于stack exchange,提问作者TrynaGetByGal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:42:46