WEEX-android返回键监听 (使用globalEvent)

利用weex-android全局监听globalEvent 做的一个双击退出的小功能
globalEvent 用于监听持久性事件,例如定位信息,陀螺仪等的变化。全局事件是需要额外APIs 处理的次要 API。你能通过 addEventListener 注册事件监听,当你不再需要的时候,也可以通过 removeEventListener 取消事件监听官方文档

WXPageActivity.java文件中增加点击方法

public void onBackPressed(){
    Map<String,Object> params=new HashMap<>();
    params.put("click","back");
    mInstance.fireGlobalEventCallback("androidback",params);
    exitByDoubleClick();
  }
  
   private void exitByDoubleClick() {
    Timer tExit=null;
    if(!isExit){
      isExit=true;
      Toast.makeText(this,"再按一次退出程序",Toast.LENGTH_SHORT).show();
      tExit=new Timer();
      tExit.schedule(new TimerTask() {
        @Override
        public void run() {
          isExit=false;//取消退出
        }
      },2000);// 如果2秒钟内没有按下返回键,则启动定时器取消掉刚才执行的任务
    }else{
      finish();
      System.exit(0);
    }
  }
这里需要注意mInstance对象。开始的时候,我是自己新创建了一个WxInstance
但是发现在vue视图中不能有效的监听到,发现视图使用的instance 跟我这新创建的
不是同一个对象。所以追了下代码,发现WXPageActivity继承了一个AbsWeexActivity,而在AbsWeexActivity中有个mInstance对象,我们使用的就是这个对象。

然后在vue视图中注册全局监听事件

<script>
const globalEvent = weex.requireModule('globalEvent')
const eventModule = weex.requireModule('event')

export default {
 name: 'App',

  created: function () {
    var objThis = this
       globalEvent.addEventListener('androidback', function (e) {
           if(objThis.$route.path=='/index'||objThis.$route.path=='/login')
           {
               eventModule.closeApp()
           
           }
           else
           {
                 objThis.$router.go(-1)
           }
     
   })
 },

}
</script>
eventModule.closeApp()是在eventModule中新增的module方法.module的使用前面我们说过了 WEEX-android播放背景音乐 (使用module)
@JSMethod(uiThread = false)
 public void closeApp() {
   System.exit(0);
 }

原文地址

相关推荐