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的參數一致。

 

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打包後親測有效♥♥♥

最後附上參考資料

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章