UE4中添加Android BroadcastReceiver

最近在UE项目中需要接收Android应用发送的退出事件,然后做相关处理。在Android应用中使用“广播“sendBroadcast来发送相关事件,发送端比较简单。

            Intent intent = new Intent();
            intent.setAction("android.action.hxdf.killApp");
            intent.putExtra("bundleID", bundleID);
            sendBroadcast(intent);    

在接收端需要注册接收事件,分别为静态和动态注册。

// 在UE中与Android相关的接口和配置信息定义在*APL_xml中,以下代码均为apl中的格式

首先声明一个注册类:

<gameActivityClassAdditions>
<insert>

private BroadcastReceiver mBroadcastReceiver;
      
      public static class HappyIslandReceiver extends BroadcastReceiver
      {
      @Override
      public void onReceive(Context context, Intent intent)
      {
      if ("android.action.hxdf.killApp".equals(intent.getAction()))
      {
      Bundle bundle = intent.getExtras();
      if (bundle != null)
      {
      Runtime.getRuntime().exit(0);
      return ;
      }
      Runtime.getRuntime().exit(0);
      }
      }
      }          
 </insert>
</gameActivityClassAdditions>

1、静态注册:在AndroidManifest中注册BroadcastReceiver。

<androidManifestUpdates>

    <addElements tag="application">
      <receiver android:name="com.epicgames.ue4.GameActivity$HappyIslandReceiver" android:exported="true">
      <intent-filter>
        <action android:name="android.action.hxdf.killApp"/>
      </intent-filter>
      </receiver>
    </addElements>

  </androidManifestUpdates>

其中HappyIslandReceiver为GameActivity的内部类,需要注意的是“receiver android:name=”后面必须是完整的路径+类名,主类和内部类间用$来间隔。

“action android:name=”后面的类型必须是与发送事件中Intent的参数一致。

扫描二维码关注公众号,回复: 8318540 查看本文章

2、动态注册:通过调用registerReceiver来手动注册,需要进行注销操作。相关的操作一般发生在onStart/onDestroy中。

<!-- optional additions to GameActivity onDestroy in GameActivity.java -->
    <gameActivityOnDestroyAdditions>
        <insert>
      unregisterReceiver(mBroadcastReceiver);
    </insert>
    </gameActivityOnDestroyAdditions>
    
    
    <!-- optional additions to GameActivity onStart in GameActivity.java -->
    <gameActivityOnStartAdditions>
        <insert>
      mBroadcastReceiver = new HappyIslandReceiver();
      registerReceiver(mBroadcastReceiver, new IntentFilter("android.action.hxdf.killApp"));
    </insert>
    </gameActivityOnStartAdditions>

其中需要注意的是在registerReceiver时IntentFilter的参数也要跟发送端的Intent参数一致。

♥♥♥以上通过UE4打包后亲测有效♥♥♥

最后附上参考资料

猜你喜欢

转载自www.cnblogs.com/-sev-/p/12098351.html