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

Dav*_*cob 3 windows-phone-7 windows-phone-8

我正在为Windows Phone 8在Silverlight中开发一个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使用reflaction.是否有任何直接的方法来访问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);
Run Code Online (Sandbox Code Playgroud)

我想保持闪光灯亮,但不捕捉视频.所以,我还没有初始化视频捕获代码.问题是,我还没有WP8,在模拟器中我无法测试这个.

任何人都可以确认,一旦我把这个代码,我的应用程序将作为Flashlight-X工作,其中灯将打开而不会闪烁,它也不会在WP8中崩溃.

谢谢

Jus*_*gel 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();
}
Run Code Online (Sandbox Code Playgroud)

使用相机手电筒(ISV_Camera,Microphone和ID_REQ_BACK_Camera)时,请务必向WP8应用添加所需的功能和要求.