.net Winform通过ADB访问安卓手机储存文件

一:Winform通过ADB读取手机一个文件夹下面的文件
1.环境准备
1.1安装 ADB
ADB(Android Debug Bridge)是 Android 开发和调试的重要工具。你需要先在开发环境中安装 ADB。你可以从 Android SDK 平台工具中获取 ADB,下载并解压 Android SDK Platform - Tools 后,将其路径添加到系统环境变量中,这样就可以在命令行中直接使用adb命令了。
1.2在手机上开启开发者选项和 USB 调试
不同手机开启开发者选项的方式有所不同。一般是在手机的 “设置” - “关于手机” 中,连续点击 “软件版本号” 若干次来开启开发者选项。然后在开发者选项中开启 USB 调试。这一步是为了让电脑能够通过 ADB 与手机进行通信。

2.在 Winform 项目中添加引用
2.1添加System.Diagnostics命名空间
这个命名空间提供了启动外部进程(如 ADB 命令)的功能。在 Winform 项目的代码文件头部添加using System.Diagnostics;

3.实现读取手机文件夹下文件的功能
以下是一个简单的示例代码,用于读取手机内部存储中某个文件夹下的文件列表。假设要读取的文件夹路径是/sdcard/Download(这是手机内部存储的下载文件夹路径示例,实际路径可能因手机存储设置等因素而不同。
// ADB命令,用于列出指定文件夹下的文件
string adbCommand = "adb shell ls /sdcard/Download";
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/c " + adbCommand;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
// 将输出结果(文件列表)按行分割并存储在列表中
string[] fileList = output.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
List fileNames = new List(fileList);
// 可以在这里将文件列表显示在Winform的控件中,比如ListView等
foreach (string file in fileNames)
{
Console.WriteLine(file);
}
代码解释:
3.1首先定义了一个 ADB 命令adbCommand,用于列出指定文件夹下的文件。adb shell ls命令用于在手机的 shell 环境中执行ls命令(类似于 Windows 中的dir命令,用于列出文件和目录)
3.2然后创建一个Process对象,用于启动一个外部进程。在这里,我们启动的是cmd.exe(Windows 命令提示符),并将adbCommand作为参数传递给它
3.3设置UseShellExecute为false和RedirectStandardOutput为true,这样可以捕获命令行输出的结果
3.4启动进程后,使用StandardOutput.ReadToEnd()方法读取命令行输出的全部内容,存储在output变量中
3.5接着使用WaitForExit()方法等待进程结束,然后将输出结果按行分割并存储在fileList数组中,再将其转换为List类型存储在fileNames列表中
3.6最后,可以将fileNames列表中的文件名称显示在 Winform 的合适控件中,如ListView、DataGridView等。这里只是简单地将文件名称打印到控制台
PS:请注意,以上代码中的文件夹路径/sdcard/Download需要根据实际情况进行调整。而且如果手机通过 USB 连接电脑时,可能需要确保手机和电脑之间的连接稳定,并且正确安装了手机的 USB 驱动程序等

二:通过ADB命令将手机文件夹下的文件导出到电脑上
1.确定手机和电脑的连接状态及 ADB 环境
首先要确保手机已经通过 USB 数据线连接到电脑,并且已经开启了开发者选项和 USB 调试模式。同时,电脑上已经正确安装了 ADB 工具,并且 ADB 工具的路径已经添加到系统环境变量中,这样才能在命令行中顺利使用 ADB 命令。

2.使用 ADB 命令导出文件
2.1单个文件导出
假设要将手机内部存储的/sdcard/Download/file.txt文件导出到电脑的C:\ExportedFiles目录下。可以使用以下 ADB 命令:
adb pull /sdcard/Download/file.txt C:\ExportedFiles(解释:adb pull是用于从手机拉取文件到电脑的命令。第一个参数/sdcard/Download/file.txt是手机上文件的路径,第二个参数C:\ExportedFiles是电脑上保存文件的目标路径。如果目标路径不存在,ADB 会尝试创建它)
2.2整个文件夹导出
若要将手机/sdcard/Download文件夹下的所有文件和子文件夹导出到电脑的C:\ExportedFiles目录下,可以使用命令:
adb pull /sdcard/Download C:\ExportedFiles(这里adb pull的第一个参数是手机上的文件夹路径,ADB 会递归地将该文件夹下的所有内容复制到电脑指定的目标文件夹中)

3.在程序中调用 ADB 命令实现文件导出(以 C# Winform 为例)
以下是一个简单的代码片段,用于在 Winform 应用程序中通过按钮点击事件调用 ADB 命令来导出文件。假设已经添加了System.Diagnostics命名空间用于执行外部进程:
// 假设要导出手机上的文件到电脑指定目录
string adbPullCommand = "adb pull /sdcard/Download/file.txt C:\ExportedFiles";
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/c " + adbPullCommand;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
MessageBox.Show("文件导出完成!");
代码解释:
3.1首先定义了adbPullCommand,这是要执行的 ADB 命令,用于将手机上的文件导出到电脑
3.2然后创建了一个Process对象来启动外部进
3.3设置UseShellExecute为false和RedirectStandardOutput为true,这样可以捕获命令行输出的内容。
3.4启动进程后,读取命令行输出并存储在output变量中,等待进程结束后,弹出一个消息框提示文件导出完成。同样,这里的文件路径等信息需要根据实际情况进行调整

三:Winform通过ADB命令将手机文件夹下的照片存在电脑上
1.前期准备
1.1确保电脑上已经安装了 ADB 工具,一般可以从 Android SDK Platform - Tools 中获取。下载并解压相应的文件后,将 ADB 所在的文件夹路径添加到系统环境变量中,这样就能在命令行的任意位置直接调用adb命令了。
2.手机端设置
2.1使用 USB 数据线将手机连接到电脑,然后在手机上开启 “开发者选项”(不同手机开启方式略有不同,通常是在手机 “设置” - “关于手机” 中,多次点击 “软件版本号” 来开启),接着在开发者选项里开启 “USB 调试” 功能,保证手机和电脑能通过 ADB 正常通信
3.在 Winform 项目中实现功能
3.1在 Winform 项目的代码文件头部添加以下命名空间引用:using System.Diagnostics;using System.IO;using System.Windows.Forms;(System.Diagnostics用于启动外部进程(执行 ADB 命令),System.IO方便后续对电脑端文件和文件夹的操作,System.Windows.Forms则用于与 Winform 界面相关的操作(比如显示提示信息等))
3.2编写代码实现照片导出功能
以下是一个示例代码,假设手机上存放照片的文件夹路径为/sdcard/DCIM/Camera(这是手机相机拍摄照片通常存放的默认路径示例,实际可能因手机设置不同而有差异),要将照片导出到电脑的C:\SavedPhotos文件夹下:
string phonePhotoFolder = "/sdcard/DCIM/Camera";
string computerSaveFolder = "C:\SavedPhotos";

// 创建电脑端保存照片的文件夹(如果不存在的话)
if (!Directory.Exists(computerSaveFolder))
{
    Directory.CreateDirectory(computerSaveFolder);
}

// ADB命令,用于将手机文件夹下所有照片导出到电脑指定文件夹
string adbPullCommand = $"adb pull {phonePhotoFolder} {computerSaveFolder}";
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/c " + adbPullCommand;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
MessageBox.Show("照片已成功导出到电脑!");
代码解释:
3.4.1在buttonExportPhotos_Click方法中,首先定义了两个字符串变量,phonePhotoFolder表示手机上存放照片的文件夹路径,computerSaveFolder表示要在电脑上保存照片的目标文件夹路径。
3.4.2接着通过Directory.Exists方法检查电脑端的目标文件夹是否存在,如果不存在,就使用Directory.CreateDirectory方法创建该文件夹,避免后续导出照片时因文件夹不存在而出现错误。
3.4.3然后构建了adbPullCommand,这是要执行的 ADB 命令,使用adb pull来将手机文件夹下的所有内容(照片及可能存在的子文件夹等)导出到电脑指定文件夹,通过字符串插值的方式将手机和电脑的文件夹路径嵌入到命令中。
3.4.4创建Process对象来启动外部进程(这里启动的是cmd.exe,也就是 Windows 的命令提示符),并把adbPullCommand作为参数传递给它(通过/c参数告知cmd.exe执行后面的命令)。设置UseShellExecute为false以及RedirectStandardOutput为true,以便捕获命令行输出的结果到output变量中,之后等待进程结束。
3.4.5最后弹出一个消息框告知用户照片已成功导出到电脑,当然,实际应用中可以根据具体情况对导出结果进行更详细的验证和提示(比如判断是否真的有照片被导出等)。

posted on 2024-12-03 11:22  Rookie_X  阅读(458)  评论(0)    收藏  举报

导航