码迷,mamicode.com
首页 > 移动开发 > 详细

UE4中添加Android BroadcastReceiver

时间:2019-12-26 13:30:19      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:定义   应用   参考   intent   null   ext   ref   完整   注销   

最近在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打包后亲测有效♥♥♥

最后附上参考资料

 

UE4中添加Android BroadcastReceiver

标签:定义   应用   参考   intent   null   ext   ref   完整   注销   

原文地址:https://www.cnblogs.com/-sev-/p/12098351.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!