通过Broadcast方式传递intent信息

    适用于svr SDK APP开发的controller插件
    controller插件框架,unity使用的是controller插件,controller.cs脚本应用可以根据自己情况进行调整实现。controller plugin这一部分使用java代码实现,以aar库的形式存在于controller插件中。AIDLControllerService和ControllerService是以common service方式存在,代码打包在GvrLctService.apk中,此代码会编译到系统system.img中。controller.cs 和controller plugin在app进程中运行,AIDLcontrollerService和ControllerService运行在com.google.vr.vrcore进程中。
    controller支持大多数daydream app的手柄行为 。 实现上主要采用与daydream手柄service同名的controllerservice实现。Daydream app可以bind到针对手柄实现的ConrollerServices. 使用daydream sdk约定的listener(IControllerListener)进行通信。如图:


图片1.png

    在设计AirMouse的操作实现的时候,通过对google controller service进行一层封装。应用通过调用AIDL controller service来对controller service进行操作。由于google/vr/vrcore/controller实现的方式是通过打包到system/priv-app/GvrLctService中,因此这里需要进行CS通信,这里使用的是LocalBroadcastManager的方式,进行通信。
    发送方:

import android.support.v4.content.LocalBroadcastManager;
LocalBroadcastManager localBroadcastManager;
public void onCreate(){
        super.onCreate();
        localBroadcastManager = LocalBroadcastManager.getInstance(this);
......
        @Override
        public void updateAirMouseControllerState(boolean enable){
           Log.d(TAG,"UpdateAirMouseControllerState"+" enable = "+enable);
           mAirMouseControllerState = enable;
           Intent intent = new Intent();
           intent.putExtra("enable", enable);
           intent.setAction("FREEZE_HAND_DEVICES");
           localBroadcastManager.sendBroadcast(intent);
        }

    接收方:

import android.support.v4.content.LocalBroadcastManager;
private LocalBroadcastManager localBroadcastManager;
    @Override
    public void onCreate() {
        super.onCreate();
        localBroadcastManager = LocalBroadcastManager.getInstance(this);
        IntentFilter filter = new IntentFilter();
        filter.addAction("FREEZE_HAND_DEVICES");
        localBroadcastManager.registerReceiver(eventReceiver,filter);
    }
    public class EventReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if("OPEN_VIBRATOR_ACTION".equals(action)) {
                controlJoystickVibrate(3, 5);
            }else if("OPEN_VIBRATOR_TIME_ACTION".equals(action)) {
                long time = intent.getLongExtra("time", -1);
                controlJoystickVibrate(3, (int)time);
......
            }else if("FREEZE_HAND_DEVICES".equals(action)){
                boolean status = intent.getBooleanExtra("enable", false);
                mFreezeAirMouseDayDream = status;
            }
        }
    }
......

这里的成员变量是手柄在2d和3d场景下切换的控制flag

    // add: Freeze DayDream hand devices activity when enable 2D dialog
    boolean mFreezeAirMouseDayDream = false;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,911评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,258评论 19 139
  • L.初中同学,做装修行业,有次和他侄女一起来家里吃饭。聊天的时候说起我家地漏下水有点慢。其实我和二师兄都没想要换一...
    苏小文S阅读 1,486评论 0 0
  • 看来今天又是一个无眠的夜晚,把酒烛灯任思绪万千星辉。窗外一片漆黑,偶尔会听到夜归的鸟儿脚步轻轻走过。想...
    蝶憩香风阅读 3,008评论 0 0
  • 人来人往的火车站,嘈杂声在人群中静静地流淌! 我拖着行李箱在“需不需要住宿”的寻呼声中穿梭,脚步在湿漉漉的地面静静...
    拾光留白阅读 3,153评论 5 1

友情链接更多精彩内容