尝试访问Microsoft.Phone.Media.Extended时反射失败

时间:2012-11-19 13:04:16

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

我正在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中使用了使用reflaction的Microsoft.Phone.Media.Extended。是否有任何直接的方法来访问Windows Phone 8中的Microsoft.Phone.Media.Extended或其他解决方法?

感谢。

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

您好,

根据主题,我们使用“VideoTorchMode”枚举来启用手电筒。根据这一点,我使用Audio.Video.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中崩溃。

由于

3 个答案:

答案 0 :(得分:6)

Microsoft.Phone.Media.Extended是WP7中的私有API,不适合第三方开发人员使用。该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应用添加所需的功能和要求。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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