onHandleIntent没有被调用

时间:2015-07-10 09:09:23

标签: android google-app-engine google-cloud-messaging

我正在尝试使用Android实现GCM,     https://developers.google.com/cloud-messaging/android/client ..

Created configuration file and placed under project/src..Added all the permissions in manifest file..
still onHandleIntent() method is not getting called, and token is not generated..

My intentservice file:

public class RegistrationIntentService extends IntentService {

    private static final String TAG = "RegIntentService";
    private static final String[] TOPICS = {"global"};

    public RegistrationIntentService() {
        super(TAG);
    }

    @Override
    public void onDestroy() {
        Log.d(TAG, "onDestroy()");
        super.onDestroy();
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

        try {
            // In the (unlikely) event that multiple refresh operations occur simultaneously,
            // ensure that they are processed sequentially.
            synchronized (TAG) {
                // [START register_for_gcm]
                InstanceID instance = InstanceID.getInstance(this);
                String token = instance.getToken(getString(R.string.gcm_defaultSenderId),
                        GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
                System.out.println("GCM Token is :" + token);
                // [END get_token]
                //Log.i(TAG, "GCM Regist Token: " + token);

                // TODO: Implement this method to send any registration to your app's servers.
                sendRegistrationToServer(token);

                // Subscribe to topic channels
                subscribeTopics(token);

                // You should store a boolean that indicates whether the generated token has been
                // sent to your server. If the boolean is false, send the token to your server,
                // otherwise your server should have already received the token.
                sharedPreferences.edit().putBoolean(AppConstants.SENT_TOKEN_TO_SERVER, true).apply();
                // [END register_for_gcm]
            }
        } catch (Exception e) {
           // Log.d(TAG, "Failed to complete token refresh", e);
            // If an exception happens while fetching the new token or updating our registration data
            // on a third-party server, this ensures that we'll attempt the update at a later time.
            sharedPreferences.edit().putBoolean(AppConstants.SENT_TOKEN_TO_SERVER, false).apply();
        }
        // Notify UI that registration has completed, so the progress indicator can be hidden.
        Intent registrationComplete = new Intent(AppConstants.REGISTRATION_COMPLETE);
        LocalBroadcastManager.getInstance(this).sendBroadcast(registrationComplete);
    }

And my manifest file:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xyz"
    android:versionCode="1"
    android:versionName="1.0" >


    <!-- Permissions needed for read contacts -->
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <!-- Permissions needed for read calendars -->
    <uses-permission android:name="android.permission.READ_CALENDAR" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.GET_TASKS"/>
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />


    <application
        android:allowBackup="true"
        android:name=".application.Application"
        android:icon="@drawable/ic_launcher"
        android:theme="@style/Theme"
        android:label="lez">


        </receiver>
        <receiver
            android:name="com.google.android.gms.gcm.GcmReceiver"
            android:exported="true"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />

            </intent-filter>
        </receiver>
        <service
            android:name=".gcm.MyGcmListenerService"
            android:exported="false" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            </intent-filter>
        </service>
        <service
            android:name=".gcm.MyInstanceIDListenerService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.gms.iid.InstanceID"/>
            </intent-filter>
        </service>
        <service
            android:name=".gcm.RegistrationIntentService"
            android:exported="false">
        </service>

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <uses-library android:name="android.test.runner" />
    </application>`enter code here`

</manifest>

请有人帮帮我吗?我可以运行上面链接中给出的示例,示例和我的代码之间的唯一区别是我没有app level gradle ...只有一个gradle文件..在gradle中我刚刚添加了google-app-gcm依赖...它是一个从eclipse导入到android studio的项目

1 个答案:

答案 0 :(得分:10)

看起来这已经很老了,但我想我会添加答案,因为我遇到了这个问题。您只需在AndroidManifest.xml文件中添加服务声明即可。将以下节点添加到“application”节点。

{{1}}

同样回答并讨论here