如何开发Android应用远程获取PC特定文件夹音乐文件并播放
解决方案:Android远程获取电脑共享音乐文件
是否需要搭建服务器?
你已经通过XAMPP拥有了可用的HTTP服务器,不需要额外搭建新服务器;另外也可以利用已设置的文件夹共享,通过SMB协议直接访问,这种方式无需HTTP服务器。
方案一:利用现有XAMPP实现文件获取与播放
配置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能访问到音乐文件列表。
- 要么将目标音乐文件夹复制到XAMPP的
编写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); ?>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();
- 使用OkHttp/Retrofit请求
方案二:通过SMB协议直接访问共享文件夹
无需依赖HTTP服务器,直接利用Windows文件夹共享的SMB协议:
添加依赖
在Android项目的build.gradle(Module级别)中添加SMB库依赖:implementation 'eu.agno3.jcifs:jcifs-ng:2.1.32'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播放逻辑同方案一 } } }权限配置
在AndroidManifest.xml中添加必要权限:<uses-permission android:name="android.permission.INTERNET" />若为Android 10及以上,需注意播放器对SMB协议的兼容性,部分场景可能需要使用文件输入流的方式加载。
内容的提问来源于stack exchange,提问作者TrynaGetByGal
相关产品推荐
相关产品推荐

