GCM воздушное расширение

Я строю воздушное расширение, и самый первый метод вызова моего расширения - проверить,

GCMRegistrar.checkDevice($context.getActivity());
GCMRegistrar.checkManifest($context.getActivity());

поддерживаются и устанавливаются, так что писали: CheckGcm.java

package com.doitflash.air.extensions.gcm;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;
import com.adobe.fre.FREInvalidObjectException;
import com.adobe.fre.FREObject;
import com.adobe.fre.FRETypeMismatchException;
import com.adobe.fre.FREWrongThreadException;

import com.google.android.gcm.GCMConstants;
import com.google.android.gcm.GCMRegistrar;

public class CheckGcm implements FREFunction 
{
    private String _result;

    public FREObject call(FREContext $context, FREObject[] $params) 
    {
            //$context.dispatchStatusEventAsync("variable", "value");

            try 
            {
            GCMRegistrar.checkDevice($context.getActivity());
            GCMRegistrar.checkManifest($context.getActivity());

            _result = "true";
        }
        catch(Exception err)
        {
            _result = "false";
        }

        return as3ConvertValue(_result);
    }

    private FREObject as3ConvertValue(String $value)
    {
        try 
        {
            return FREObject.newObject($value);
        } 
        catch (FREWrongThreadException e) 
        {
            return null;
        }
    }

}

и я настраиваю манифест андроида следующим образом:

<manifestAdditions><![CDATA[<manifest android:installLocation="auto">

<permission android:name="air.air.com.doitflash.SampleApp.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="air.air.com.doitflash.SampleApp.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<application>

    <activity>
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver 
        android:enabled="true" 
        android:exported="true"
        android:name="com.google.android.gcm.GCMBroadcastReceiver" 
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="air.air.com.doitflash.SampleApp" />
        </intent-filter>
    </receiver>

    <service 
        android:enabled="true" 
        android:exported="true" 
        android:name="com.doitflash.air.extensions.gcm.GCMIntentService" />

</application>
</manifest>]]></manifestAdditions>

Я также настроил GCMIntentService:

package com.doitflash.air.extensions.gcm;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import android.widget.Toast;

import com.google.android.gcm.GCMBaseIntentService;

public class GCMIntentService extends GCMBaseIntentService 
{
    private static final String TAG = "===GCMIntentService===";

    public GCMIntentService()
    {
        super("000000"); // senderID
    }

    @Override
    protected void onRegistered(Context arg0, String registrationId) 
    {

    }

    @Override
    protected void onUnregistered(Context arg0, String arg1)
    {

    }

    @Override
    protected void onMessage(Context arg0, Intent arg1) 
    {
        //Log.i(TAG, "notification title = " +  arg1.getStringExtra("title"));
        //Log.i(TAG, "notification message = " +  arg1.getStringExtra("msg"));
        //Log.i(TAG, "notification type = " +  arg1.getStringExtra("type"));
        //Log.i(TAG, "notification id= " +  arg1.getStringExtra("id"));

    }

    @Override
    protected void onError(Context arg0, String errorId) 
    {

    }

    @Override
    protected boolean onRecoverableError(Context context, String errorId)
    {
        return super.onRecoverableError(context, errorId);
    }
}

у меня все выглядит хорошо, но когда я пытаюсь отследить метод проверки в моем проекте, он возвращает ноль! так что я знаю, что должно быть что-то не так с:

GCMRegistrar.checkDevice($context.getActivity());
GCMRegistrar.checkManifest($context.getActivity());

потому что, когда я уберу эти две строки, след в воздухе вернётся. незадолго до того, как приступить к созданию воздушного расширения, я собрал образец GCM в java, и все работало отлично, но я, кажется, не понимаю, почему воздушная версия не работает. есть идеи?

ОБНОВЛЕНИЕ: я использовал eclipse logcat, чтобы увидеть, что происходит на моем телефоне, и это может быть несколько подсказок:

Could not find method com.google.android.gcm.GCMRegistrar.checkDevice, referenced from method com.doitflash.air.extensions.gcm.CheckGcm.call
unable to resolve static method 284: Lcom/google/android/gcm/GCMRegistrar;.checkDevice (Landroid/content/Context;)V

0 ответов

Другие вопросы по тегам