我正在开发一个Xamarin Forms应用程序,它使用蓝牙快门点击器来拍照。目前,蓝牙快门在被点击时会激活音量上/下按钮。我正在尝试拦截音量按钮,这样我就可以在点击点击器时打开设备相机。
我正在尝试让Android版本工作。我可以在我的MainActivity.cs文件中成功拦截Android代码中的音量按钮。我想我必须使用依赖服务,以便音量按钮触发CameraButton_Clicked事件,但我不知道如何正确地进行这项工作。任何帮助都将非常感谢。
主要活动.CS:
//override the volume up/down buttons for bluetooth shutter clicker
public override bool OnKeyUp(Keycode keyCode, KeyEvent e)
{
if (keyCode == Keycode.VolumeDown)
{
return true;
}
if (keyCode == Keycode.VolumeUp)
{
return true;
}
return base.OnKeyUp(keyCode, e);
}
public override bool OnKeyDown(Keycode keyCode, KeyEvent e)
{
if (keyCode == Keycode.VolumeDown)
{
return true;
}
if (keyCode == Keycode.VolumeUp)
{
return true;
}
return base.OnKeyDown(keyCode, e);
}
接口:
namespace MyApp
{
public interface IBluetoothClicker
{
object GetVolumeOverride();
}
}
蓝牙遥控器_机器人.cs:
[assembly: Xamarin.Forms.Dependency (typeof (BluetoothClicker_Droid))]
namespace MyApp.Droid
{
public class BluetoothClicker_Droid: IBluetoothClicker
{
public BluetoothClicker_Droid ()
{
}
public object GetVolumeOverride()
{
//CameraButton_Clicked = true;
return true;
}
}
}
照相机页面.xaml.cs:
public CameraPage()
{
InitializeComponent();
CameraImage.Source = "CameraImage.png";
TakePhotoButton.Clicked += CameraButton_Clicked; //opens camera
Func<object> func = () =>
{
var obj = DependencyService.Get<IBluetoothClicker>().GetVolumeOverride();
//obj += CameraButton_Clicked;
return obj;
};
}
1条答案
按热度按时间cdmah0mi1#
If you just want to achieve that in android. you could open the camera directly like following GIF.
You can take a photo in android, Then use message center to upload your image in PCL like followcode.
MainPage.xaml.cs
MainActivity.cs
So I do not know why you want to use
DependencyService
.Maybe you have better ways to achieve that.There is my demo. I used VS 2019, it will make some difference If you used VS 2017.
https://github.com/851265601/InterceptButton