Xamarin.Forms Android PDA 监听手机按键

1.介绍
项目中,有个需求是监听手机音量按键,并在ContentPage页面进行事件处理。
2.解决方案

1.新建事件发送者
新建 MyKeyEventPublish.cs ,代码如下

public class MyKeyEventPublish
    {
    	//全局静态变量,以便在需要监听时使用
        public static MyKeyEventPublish myKeyEventPublish { get; set; }

        public delegate void OnKeyDown_callback(int keyCode);
        public OnKeyDown_callback cb;

        public Action<int> OnKeyDown { set; get; }
    }

2.App.cs

 public App(MyKeyEventPublish myKeyEventPublish)
   {
       InitializeComponent();
      //监听手机按键
       MyKeyEventPublish.myKeyEventPublish = myKeyEventPublish;            
       //起始页
       MainPage = new NavigationPage(new Login());           
   }

3.MainActivity.cs (Android)

//按键事件发布者
MyKeyEventPublish myKeyEventPublish;
 protected override void OnCreate(Bundle savedInstanceState)
 {
     TabLayoutResource = Resource.Layout.Tabbar;
     ToolbarResource = Resource.Layout.Toolbar;
     //实例化按键发布者
     myKeyEventPublish = new MyKeyEventPublish();
     
     base.OnCreate(savedInstanceState);
     Xamarin.Essentials.Platform.Init(this, savedInstanceState);
     global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
     LoadApplication(new App(myKeyEventPublish)); 
 }
 //监听键盘按下
 public override bool OnKeyDown([GeneratedEnum]Keycode keyCode, KeyEvent e)
  {
       if (keyCode == Android.Views.Keycode.Back) {
           return base.OnKeyDown(keyCode,e);
       }
       if (myKeyEventPublish == null || myKeyEventPublish.OnKeyDown == null) return true;
       //键值更改事件发布方法
       myKeyEventPublish.OnKeyDown((int)keyCode);
       return true;          
       //return base.OnKeyDown(keyCode, e); //不屏蔽原有功能
   }

4.ContentPage.cs 页面使用

public Login()
 {
      InitializeComponent();
      NavigationPage.SetHasNavigationBar(this, false);
      this.Appearing += Login_Appearing;
      this.Disappearing += Login_Disappearing;
  }
 //页面销毁
  private void Login_Disappearing(object sender, EventArgs e)
  {
      MyKeyEventPublish.myKeyEventPublish.OnKeyDown -= OnKeyDownCallBack;
  }
  //页面显示
  private void Login_Appearing(object sender, EventArgs e)
  {
     MyKeyEventPublish.myKeyEventPublish.OnKeyDown += OnKeyDownCallBack;
  }
  //这个是处理函数
  void OnKeyDownCallBack(int keyCode)
  {
     Console.WriteLine("keycode:" + keyCode);
  }

以上是全部代码,如有问题,请及时评论!我会一一解答!请多多点赞哦!

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上海小飞象

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值