Android Xamarin 问题与 IGpioCallback
Android Things with Xamarin Issue with IGpioCallback
我刚开始 Android Xamarin 的事情,我已经成功地打开了 LED,但我无法检测到按钮输入。
我认为问题出在下面代码中的 "RegisterGpioCallback"
,但我不确定,也不知道如何解决。有人可以帮帮我吗??这是我正在使用的代码:
public class BlinkActivity : Activity
{
private IGpio gpio;
private IGpio button;
private IGpioCallback mButtonCallback;
protected override void OnCreate(Bundle savedInstanceState)
{
this.mButtonCallback = mButtonCallback;
PeripheralManager peripheralManager = PeripheralManager.Instance;
gpio = peripheralManager.OpenGpio("BCM17");
gpio.SetDirection(Gpio.DirectionOutInitiallyLow);
gpio.Value = false;
button = peripheralManager.OpenGpio("BCM4");
button.SetDirection(Gpio.DirectionIn);
button.SetEdgeTriggerType(Gpio.EdgeNone);
button.RegisterGpioCallback(new Handler(), mButtonCallback);
base.OnCreate(savedInstanceState);
Task.Run(() =>
{
if (mButtonCallback.OnGpioEdge(button) == true)
{
gpio.Value = !gpio.Value;
}
});
}
}
您需要实际实现 IGpioCallback
接口,以便 com.google.android.things.pio
库可以在 GPIO 的值发生变化时将 "call back" 放入您的应用程序中。
将 RegisterGpioCallback
分配给实现接口的实际对象实例,在下面的示例中,它将位于 Activity
.
public class BlinkActivity : Activity, IGpioCallback
{
~~~~
button.RegisterGpioCallback(new Handler(), this);
~~~~
// remove the Task.Run block
public OnGpioEdge(Gpio gpio)
{
Log.Debug("SO", gpio.Value.ToString());
}
~~~~
}
我刚开始 Android Xamarin 的事情,我已经成功地打开了 LED,但我无法检测到按钮输入。
我认为问题出在下面代码中的 "RegisterGpioCallback"
,但我不确定,也不知道如何解决。有人可以帮帮我吗??这是我正在使用的代码:
public class BlinkActivity : Activity
{
private IGpio gpio;
private IGpio button;
private IGpioCallback mButtonCallback;
protected override void OnCreate(Bundle savedInstanceState)
{
this.mButtonCallback = mButtonCallback;
PeripheralManager peripheralManager = PeripheralManager.Instance;
gpio = peripheralManager.OpenGpio("BCM17");
gpio.SetDirection(Gpio.DirectionOutInitiallyLow);
gpio.Value = false;
button = peripheralManager.OpenGpio("BCM4");
button.SetDirection(Gpio.DirectionIn);
button.SetEdgeTriggerType(Gpio.EdgeNone);
button.RegisterGpioCallback(new Handler(), mButtonCallback);
base.OnCreate(savedInstanceState);
Task.Run(() =>
{
if (mButtonCallback.OnGpioEdge(button) == true)
{
gpio.Value = !gpio.Value;
}
});
}
}
您需要实际实现 IGpioCallback
接口,以便 com.google.android.things.pio
库可以在 GPIO 的值发生变化时将 "call back" 放入您的应用程序中。
将 RegisterGpioCallback
分配给实现接口的实际对象实例,在下面的示例中,它将位于 Activity
.
public class BlinkActivity : Activity, IGpioCallback
{
~~~~
button.RegisterGpioCallback(new Handler(), this);
~~~~
// remove the Task.Run block
public OnGpioEdge(Gpio gpio)
{
Log.Debug("SO", gpio.Value.ToString());
}
~~~~
}