top
技術

本題

タイトル通り、MAUI に Folder Picker (フォルダ選択ダイアログ) が追加されたようです✨

ひと月前くらいに MAUI の学習も兼ねて、簡単なミュージックプレイヤーを作ろうとしたことがありました。

選択したフォルダの中にあるMP3ファイルを名前の順番通りに、再生リストに入れるという感じにしたかったのですが、File Picker (ファイル選択ダイアログ) はあるのに、Folder Picker はなくて製作を断念したんですよね・・・

自作で Folder Picker を作る方法は Stack Overflow などに載ってはいたのですが、いまいち乗り気になれず。

そろそろ公式で追加されていないかなーと思ってググってみたら、まさかのヒット! やった!

導入手順

  1. NuGet から CommunityToolkit.Maui をインストール

  2. パッケージの ReadMe.txt の手順に従って MauiProgram.cs を適切に変更

    + using CommunityToolkit.Maui;
    
    public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
            var builder = MauiApp.CreateBuilder();
            builder
                .UseMauiApp<App>()
    +           .UseMauiCommunityToolkit()
                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
    +               fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
                });
    
            builder.Services.AddMauiBlazorWebView();
    
    #if DEBUG
            builder.Services.AddBlazorWebViewDeveloperTools();
            builder.Logging.AddDebug();
    #endif
    
            return builder.Build();
        }
    }
    
  3. Android の場合は、さらに AndroidManifest.xml に権限を追加

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android">
        <application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true"></application>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.INTERNET" />
    +   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    </manifest>
    
  4. 実際に使用する
    Namespace は CommunityToolkit.Maui.Storage.FolderPicker

    private string folderName = "folder Name";
    private string folderPath = "folder Path";
    
    private async Task PickAsync()
    {
    +   var folder = await CommunityToolkit.Maui.Storage.FolderPicker.Default.PickAsync(CancellationToken.None);
    
        folderName = folder.Name;
        folderPath = folder.Path;
    }
    

これで、これからはフォルダー選択に悩まされることはなくなりますね!

良かったです😊