我正在使用 Adobe AIR 编写一个应用程序,并尝试使用本机扩展将其部署到 Android。该应用程序需要能够使用 Google 的 C2DM 服务(相当于 Apple 的推送通知服务)。这需要设置一个 BroadcastReceiver 以便从 Google 接收设备注册。我能够在独立的本机 Android 应用程序(无 AIR)中正常工作,但似乎无法在 AIR 应用程序中正常工作。我想我一定是错误地设置了清单 XML,但我看不出怎么做。
以下是 AIR 应用程序清单文件中 XML 的相关部分:
<android>
<manifestAdditions><![CDATA[
<manifest android:installLocation="auto">
<permission android:protectionLevel="signature" android:name="com.example.znotification.permission.C2D_MESSAGE" />
<uses-permission android:name="com.example.znotification.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:enabled="true">
<receiver android:name="com.example.znotification.C2DMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
</intent-filter>
</receiver>
</application>
</manifest>
]]></manifestAdditions>
</android>
在标签中引用的本机 Java 类 C2DMBroadcastReceiver 中,它所做的只是注销一条消息,说明它已收到广播。我已经验证我正在正确设置 Intent(请参阅下面的 Java 代码),但 BroadcastReceiver 永远不会被击中。
Context appContext = context.getActivity().getApplicationContext();
Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
registrationIntent.putExtra("app",PendingIntent.getBroadcast(appContext, 0, new Intent(), 0));
registrationIntent.putExtra("sender", args[0].getAsString());
appContext.startService(registrationIntent);
通常,应如何在 AIR 应用程序的清单 XML 中设置 BroadcastReceiver?具体来说,您如何在 XML 中告诉应用程序在接收到给定广播时运行正确的 BroadcastReceiver?显然,我的做法是不正确的......