最近在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的参数一致。
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打包后亲测有效♥♥♥
最后附上参考资料