2

Adobe AIRを使用してアプリを作成し、ネイティブ拡張機能を使用してAndroidにデプロイしようとしています。アプリは、GoogleのC2DMサービス(Appleのプッシュ通知サービスに相当)を利用できる必要があります。これには、Googleからデバイスの登録を受け取るためにBroadcastReceiverを設定する必要があります。スタンドアロンのネイティブ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では、ブロードキャストを受信したことを示すメッセージをログアウトするだけです。インテントを正しく設定していることを確認しましたが(以下の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を実行するようにアプリにどのように指示しますか?明らかに、私がしていることは正しくありません...

4

1 に答える 1

0

もうすぐです。AIRコンポーネントのAndroid名が少し間違っていると思います。いくつかのクラスの「air」プレフィックスに注意して、以下を試してください。

<android>
<manifestAdditions><![CDATA[
    <manifest android:installLocation="auto">
        <permission android:protectionLevel="signature" android:name="air.com.example.znotification.permission.C2D_MESSAGE" />

        <uses-permission android:name="air.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" />
                    <category android:name="air.com.example.znotification" />
                </intent-filter>

                <intent-filter>
                    <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
                    <category android:name="air.com.example.znotification" />
                </intent-filter>

            </receiver>
        </application>

    </manifest>

]]></manifestAdditions>

于 2012-06-11T13:20:43.070 に答える