2013-06-23 13 views
6

OK, mój problem jest dość prosty.Włączanie i wyłączanie lampy błyskowej

Udało mi się włączyć lampę błyskową (i pozostawić ją włączoną).

Jednak nadal nie jestem pewien, jak to wyłączyć (lol).

Oto mój kod:

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 
    { 
     turnWhiteScreen(true); 
    } 

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

Jakieś pomysły?


P.S.

  • Wyobrażałem sobie, że konwersja .on s do .off s mogło działało, ale tak nie jest.
  • ten został przetestowany na HTC 8S i Lumia 820.

Odpowiedz

10

Wygląda na to, że nie można odzyskać urządzenie wykrywające dwukrotnie (nie jestem pewien, dlaczego), więc należy przechowywać go w nieruchomości :

protected AudioVideoCaptureDevice Device { get; set; } 

private async void ButtonTurnOn_Click(object sender, RoutedEventArgs e) 
{ 
    var sensorLocation = CameraSensorLocation.Back; 

    try 
    { 
     if (this.Device == null) 
     { 
      // get the AudioViceoCaptureDevice 
      this.Device = 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)) 
     { 
      this.Device.SetProperty(KnownCameraAudioVideoProperties.VideoTorchMode, VideoTorchMode.On); 

      // set flash power to maxinum 
      this.Device.SetProperty(KnownCameraAudioVideoProperties.VideoTorchPower, 
       AudioVideoCaptureDevice.GetSupportedPropertyRange(sensorLocation, KnownCameraAudioVideoProperties.VideoTorchPower).Max); 
     } 
     else 
     { 
      turnWhiteScreen(true); 
     } 

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

Następnie, aby go wyłączyć:

private void ButtonTurnOff_Click(object sender, RoutedEventArgs e) 
{ 
    var sensorLocation = CameraSensorLocation.Back; 

    try 
    { 
     // turn flashlight on 
     var supportedCameraModes = AudioVideoCaptureDevice 
      .GetSupportedPropertyValues(sensorLocation, KnownCameraAudioVideoProperties.VideoTorchMode); 
     if (this.Device != null && supportedCameraModes.ToList().Contains((UInt32)VideoTorchMode.Off)) 
     { 
      this.Device.SetProperty(KnownCameraAudioVideoProperties.VideoTorchMode, VideoTorchMode.Off); 
     } 
     else 
     { 
      turnWhiteScreen(false); 
     } 
    } 
    catch (Exception ex) 
    { 
     // Flashlight isn't supported on this device, instead show a White Screen as the flash light 
     turnWhiteScreen(false); 
    } 
} 
+0

Dobrze, że to niesamowite - i tak proste! **To działa**! Wielkie dzięki, kolego! ;-) –

0

Spróbuj jeden

private static VideoTorchMode _videoTorchMode = VideoTorchMode.Off; 
private AudioVideoCaptureDevice _videoRecordingDevice; 

Sprawdź latarkę w urządzeniu.

private async void CheckTorch() { 
    if(AudioVideoCaptureDevice.AvailableSensorLocations.Contains(CameraSensorLocation.Back) && 
     AudioVideoCaptureDevice.GetSupportedPropertyValues(CameraSensorLocation.Back, KnownCameraAudioVideoProperties.VideoTorchMode).ToList().Contains((UInt32)VideoTorchMode.On)) { 
    var temp = AudioVideoCaptureDevice.GetAvailableCaptureResolutions(CameraSensorLocation.Back)[0]; 
    var resolution = new Windows.Foundation.Size(temp .Width, temp .Height); 
    _videoRecordingDevice = await AudioVideoCaptureDevice.OpenAsync(CameraSensorLocation.Back, resolution); 
    } 
    else 
    MessageBox.Show("Your device does not support torch"); 
} 

do zmiany stanu latarka

private void SetTorchMode(){ 
    try { 
    if (BackgroundHandler.Instance.IsBackTorchExist) { 
     if (_videoTorchMode == VideoTorchMode.Off) { 
      _videoRecordingDevice.SetProperty(KnownCameraAudioVideoProperties.VideoTorchMode, VideoTorchMode.On); 
      _videoTorchMode = VideoTorchMode.On; 
     } 
     else { 
      _videoRecordingDevice.SetProperty(KnownCameraAudioVideoProperties.VideoTorchMode, VideoTorchMode.Off); 
      _videoTorchMode = VideoTorchMode.Off;          
     } 
     } 
    } 
    catch (Exception ex){ } 
}