Est-ce que quand tu branches le téléphone au PC il apparait avec une lettre de lecteur ? Si ce n'est pas le cas, tu ne peux pas le gérer comme un disque "normal", parce que les fichiers n'ont pas un vrai chemin d'accès utilisable par ton application.
Cela dit, j'ai un peu cherché, et j'ai réalisé que sous Windows 8 il y a une API un peu plus simple pour manipuler des devices MTP. Normalement c'est une API pour les applis "Modern UI" (Metro), mais en fait on peut l'utiliser depuis une application de bureau (WinForms, WPF, console...), moyennement une petite bidouille pas très compliquée.
Par contre, cette API est assez différente de ce que tu as probablement l'habitude d'utiliser... elle est asynchrone, donc il faut utiliser async/await, et elle n'utilise pas les classes habituelles (Directory, File, FileStream, etc) mais des classes spécifiques (StorageFolder, StorageFile, etc)
Par exemple pour lister les dossiers de mon Nokia Lumia dans une appli console, je fais un truc comme ça :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| using System;
using System.Linq;
using System.Threading.Tasks;
using Windows.Devices.Enumeration;
using Windows.Devices.Portable;
namespace TestConsoleRT
{
class Program
{
static void Main(string[] args)
{
PrintFolderNames().Wait();
Console.ReadLine();
}
static async Task PrintFolderNames()
{
var devices = await DeviceInformation.FindAllAsync(DeviceClass.PortableStorageDevice);
var lumia = devices.FirstOrDefault(d => d.Name == "Lumia 920");
if (lumia == null)
{
Console.WriteLine("Device not found");
return;
}
var rootFolder = StorageDevice.FromId(lumia.Id);
var phoneFolder = await rootFolder.GetFolderAsync("Phone");
var folders = await phoneFolder.GetFoldersAsync();
foreach (var folder in folders)
{
Console.WriteLine(folder.Name);
}
}
}
} |
Je suppose que ça marcherait aussi avec un tel Android...
Partager