最近在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打包後親測有效♥♥♥
最後附上參考資料