懐中電灯

Browse sample. サンプルを参照する

この記事では、.NET Multi-platform App UI (.NET MAUI) IFlashlight インターフェイスを使用する方法について説明します。 このインターフェイスを使用すると、デバイスのカメラ フラッシュのオンとオフを切り替えて、懐中電灯をエミュレートできます。

IFlashlight インターフェイスのデフォルトの実装は、Flashlight.Default プロパティを通じて使用できます。 IFlashlight インターフェイスと Flashlight クラスはどちらも Microsoft.Maui.Devices 名前空間に含まれています。

作業の開始

懐中電灯の機能にアクセスするには、次のプラットフォーム固有の設定が必要です。

プロジェクトで設定できるアクセス許可は、FlashlightCamera の 2 つです。 これらのアクセス許可は、次の方法で確認できます。

  • アセンブリベースのアクセス許可を追加します。

    Platforms/Android/MainApplication.cs ファイルを開き、using ディレクティブの後に次のアセンブリ属性を追加します。

    [assembly: UsesPermission(Android.Manifest.Permission.Flashlight)]
    [assembly: UsesPermission(Android.Manifest.Permission.Camera)]
    

    または

  • Android マニフェストを更新します。

    Platforms/Android/AndroidManifest.xml ファイルを開き、manifest ノードに次を追加します。

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

    または

  • マニフェスト エディターで Android マニフェストを更新します。

    Visual Studio で、Platforms/Android/AndroidManifest.xml ファイルをダブルクリックして、Android マニフェスト エディターを開きます。 次に、[必要なアクセス許可] で、FLASHLIGHTCAMERA のアクセス許可をチェックします。 これにより、AndroidManifest.xml ファイルが自動的に更新されます。

これらのアクセス許可を設定すると、特定のハードウェアを持たないデバイスが Google Play で自動的にフィルタリングされます。 このフィルター処理を回避するには、Platforms/Android/MainApplication.cs ファイルの using ディレクティブの後に次のアセンブリ属性を追加します。

[assembly: UsesFeature("android.hardware.camera", Required = false)]
[assembly: UsesFeature("android.hardware.camera.autofocus", Required = false)]

懐中電灯を使用する

懐中電灯は、TurnOnAsync() メソッドと TurnOffAsync() メソッドを使用してオンまたはオフにできます。 次のコード例では、懐中電灯のオンまたはオフの状態を Switch コントロールに関連付けます。

private async void FlashlightSwitch_Toggled(object sender, ToggledEventArgs e)
{
    try
    {
        if (FlashlightSwitch.IsToggled)
            await Flashlight.Default.TurnOnAsync();
        else
            await Flashlight.Default.TurnOffAsync();
    }
    catch (FeatureNotSupportedException ex)
    {
        // Handle not supported on device exception
    }
    catch (PermissionException ex)
    {
        // Handle permission exception
    }
    catch (Exception ex)
    {
        // Unable to turn on/off flashlight
    }
}

さらに、TurnOnAsync() メソッドを呼び出す前に、IsSupportedAsync メソッドを呼び出して、デバイスで懐中電灯が使用できるかどうかを確認できます。

プラットフォームによる違い

この節では、プラットフォーム固有と懐中電灯との違いについて説明します。

Flashlight クラスは、デバイスのオペレーティング システムに基づいて最適化されています。

API レベル 23 以上

新しい API レベルでは、デバイスのフラッシュ ユニットをオン/オフするために、Torch モードが使用されます。

API レベル 22 以下

カメラ ユニットの FlashMode をオン/オフするために、カメラ サーフェス テクスチャが作成されます。