【问题标题】:Reflection failure when attempting to access Microsoft.Phone.Media.Extended尝试访问 Microsoft.Phone.Media.Extended 时反射失败
【发布时间】:2012-11-07 09:52:40
【问题描述】:

我正在 Silverlight 中为 windows phone 8 开发一个 Flash Light 应用程序。目前 对于使用“Microsoft.Phone.Media.Extended”程序集,我深陷其中一个问题。适用于 Windows Phone 7 的 Flash Light 应用程序已经在 Windows Phone Marketplace 中发布,它在 Windows Phone 7 上运行良好,但由于“Microsoft.Phone.Media.Extended”dll,它不适用于 Windows Phone 8。

在将 WP7 应用程序转换为 wp8 并运行后,我收到了这种类型的错误消息:

无法加载文件或程序集“Microsoft.Phone.Media.Extended,Version=7.0.0.0, Culture=neutral, PublicKeyToken=24eec0d8c86cda1e”或其依赖项之一。系统找不到特定文件。”

根据以下链接了解 Windows Phone 特定功能: http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206947(v=vs.105).aspx

如果您使用反射来访问此程序集中的 API,因为它们没有公开公开,您的应用可能会在 Windows Phone 8 设备上失败。删除对此程序集的调用并使用公开的媒体 API。

我不明白如何使用公开的媒体 API。我在 Windows Phone 7 中使用反射使用 Microsoft.Phone.Media.Extended。在 Windows Phone 8 中是否有直接访问 Microsoft.Phone.Media.Extended 的方法或其他方式来解决这个问题?

谢谢。

================================================ ============================ 编辑问题:

嗨,

根据线程,我们使用“VideoTorchMode”枚举来打开手电筒。据此,我使用了使用 Windows.Phone.Media.Capture 命名空间的 AudioVideoCaptureDevice 类,代码如下:

    var objDevice = await AudioVideoCaptureDevice.OpenAsync(CameraSensorLocation.Back, AudioVideoCaptureDevice.GetAvailableCaptureResolution(CameraSensorLocation.Back).First());
    objDevice .SetProperty(KnownCameraAudioVideoProperties.VideoTorchMode, VideoTorchMode.On);

我想保持闪光灯打开但不拍摄视频。所以,我还没有初始化视频捕获代码。问题是,我还没有 WP8,在模拟器中我无法测试。

任何人都可以确认,一旦我输入此代码,我的应用程序将像 Flashlight-X 一样工作,其中灯会亮起而不会闪烁,并且它也不会在 WP8 中崩溃。

谢谢

【问题讨论】:

  • Is there any direct method for accessing Microsoft.Phone.Media.Extended in Windows Phone 8 关键是,那个DLL已经在WP8中被删除了,所以你不能再使用它了。市场上有兼容 WP8 的手电筒应用程序,因此某处必须有等效的 API。是时候深入研究 MSDN 文档了;)

标签: windows-phone-7 windows-phone-8


【解决方案1】:

如果您使用新 API“录制”视频,那么使用 VideoTorchMode 枚举可能只是希望您想要创建“手电筒”效果。

【讨论】:

  • 嗨..刚刚根据您的回答克劳斯编辑了我的问题。感谢您的帮助和信息。
【解决方案2】:

Microsoft.Phone.Media.Extended 是 WP7 中的私有 API,不打算供 3rd 方开发人员使用。该 API 不存在或适用于 WP8。

对于 WP8 手电筒,使用 VideoTorchMode=On 的 AudioVideoCaptureDevice 已知属性。此外,请确保通过显示白屏来处理异常或没有相机手电筒的设备等故障。

下面是在我的 Lumia 820 和 Lumia 920 上打开相机闪光灯的代码示例:

var sensorLocation = CameraSensorLocation.Back;

try
{
    // get the AudioViceoCaptureDevice
    var avDevice = await AudioVideoCaptureDevice.OpenAsync(sensorLocation,
        AudioVideoCaptureDevice.GetAvailableCaptureResolutions(sensorLocation).First());

    // turn flashlight on
    var supportedCameraModes = AudioVideoCaptureDevice
        .GetSupportedPropertyValues(sensorLocation, KnownCameraAudioVideoProperties.VideoTorchMode);
    if (supportedCameraModes.ToList().Contains((UInt32)VideoTorchMode.On))
    {
        avDevice.SetProperty(KnownCameraAudioVideoProperties.VideoTorchMode, VideoTorchMode.On);

        // set flash power to maxinum
        avDevice.SetProperty(KnownCameraAudioVideoProperties.VideoTorchPower,
            AudioVideoCaptureDevice.GetSupportedPropertyRange(sensorLocation, KnownCameraAudioVideoProperties.VideoTorchPower).Max);
    }
    else
    {
        ShowWhiteScreenInsteadOfCameraTorch();
    }

}
catch(Exception ex)
{
    // Flashlight isn't supported on this device, instead show a White Screen as the flash light
    ShowWhiteScreenInsteadOfCameraTorch();
}

确保在使用相机手电筒(ISV_Camera、Microphone 和 ID_REQ_BACK_Camera)时向您的 WP8 应用添加所需的功能和要求。

【讨论】:

  • 嗨,贾斯汀.. 工作就像一个魅力.. 非常感谢.. 你是一个真正的救世主。非常感谢。
  • 嗨贾斯汀,很抱歉迟到的评论。您的解决方案效果很好,应用程序停止崩溃。但是,在 WP8 中,灯光会在一秒钟内启动和停止。而已。我实际上想要一个持续亮着的灯,直到用户按下按钮。表示哪个用户点击,灯亮,不闪烁,用户点击关闭,灯灭。你能帮忙吗?
【解决方案3】:

如何从某个地方获取此程序集并将其直接添加到您的 XAP(尝试询问 XDA 开发人员)?如果它已签名并且不需要任何特殊功能,这可能会起作用。

【讨论】:

    猜你喜欢
    • 2011-07-08
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2020-06-08
    • 2018-07-09
    • 1970-01-01
    • 2020-05-27
    相关资源
    最近更新 更多