Не удалось найти пакет com.google.android.gsf.

Я пытаюсь использовать новую систему Google Cloud Messaging, но у меня есть некоторые проблемы.

Я прочитал документ "Начало работы" и просмотрел демонстрационное приложение; после этого я применил требования к моему приложению, тогда я создал новое виртуальное устройство с API 16.

Но когда я пытаюсь зарегистрировать свое устройство в GCM, он терпит неудачу из-за этой строки:

GCMRegistrar.checkDevice(getApplicationContext()); 

В logcat я вижу эти ошибки:

07-05 07:06:31.925: E/AndroidRuntime(691): FATAL EXCEPTION: main
07-05 07:06:31.925: E/AndroidRuntime(691): java.lang.UnsupportedOperationException: Device does not have package com.google.android.gsf
07-05 07:06:31.925: E/AndroidRuntime(691):  at com.google.android.gcm.GCMRegistrar.checkDevice(GCMRegistrar.java:83)
07-05 07:06:31.925: E/AndroidRuntime(691):  at aero.tav.mobile.genel$4.onClick(genel.java:201)
07-05 07:06:31.925: E/AndroidRuntime(691):  at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
07-05 07:06:31.925: E/AndroidRuntime(691):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-05 07:06:31.925: E/AndroidRuntime(691):  at android.os.Looper.loop(Looper.java:137)
07-05 07:06:31.925: E/AndroidRuntime(691):  at android.app.ActivityThread.main(ActivityThread.java:4745)
07-05 07:06:31.925: E/AndroidRuntime(691):  at java.lang.reflect.Method.invokeNative(Native Method)
07-05 07:06:31.925: E/AndroidRuntime(691):  at java.lang.reflect.Method.invoke(Method.java:511)
07-05 07:06:31.925: E/AndroidRuntime(691):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
07-05 07:06:31.925: E/AndroidRuntime(691):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-05 07:06:31.925: E/AndroidRuntime(691):  at dalvik.system.NativeStart.main(Native Method)

Я добавил gcm.jar в мой путь к классу; Я не знаю, что не так.

Ответ 1

мне кажется, что вы используете неправильный эмулятор.

Эмулятор по умолчанию использует обычный эмулятор Android, у которого нет пакетов Google, и не может запускать всевозможные вещи, такие как карты, c2dm и всевозможные вещи.

что вы хотите сделать, это создать новый эмулятор, который может поддерживать API Google.

то при запуске проекта выберите эмулятор, который запускает целевое имя Google APIs (Google Inc).

удачи.

Ответ 2

Вероятно, он работает на устройстве, которое не поддерживает GCM, поэтому ваш вызов в GCMRegistrar.checkDevice(this); бросает исключение. Проверьте свой логарифм, чтобы убедиться.

Если вы тестируете его на эмуляторе, убедитесь, что эмулятор настроен на использование API Google. Когда вы создаете эмулятор, в окне создания нового AVD есть поле "Target". Выберите в этом поле что-то, что говорит "API Google".

enter image description here