手电筒

Browse sample. 浏览示例

本文介绍如何使用 .NET Multi-platform App UI (.NET MAUI) IFlashlight 接口。 使用此接口,可以打开和关闭设备的相机闪光灯,以模拟手电筒。

IFlashlight 接口的默认实现通过 Flashlight.Default 属性提供。 IFlashlight 接口和 Flashlight 类都包含在 Microsoft.Maui.Devices 命名空间中。

开始使用

要访问手电筒功能,需执行以下特定于平台的设置。

项目中有两种权限需要配置:FlashlightCamera。 可通过以下方式设置这些权限:

  • 添加基于程序集的权限:

    打开 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 清单编辑器。 然后,在“所需权限”区域,选中“FLASHLIGHT”“CAMERA”权限。 这样会自动更新 AndroidManifest.xml 文件。

如果设置了这些权限,Google Play 将自动筛选出设备,而无需特定硬件。 可以通过在 using 指令后面将以下程序集特性添加到 Platforms/Android/MainApplication.cs 文件来绕过此筛选:

[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