2013-01-18 30 views
7

Uygulamamı GCM'ye kaydettirmeye çalışıyorum ancak uygulamamın neden kaydedilmediğini bilmiyorum. GCMRegistrar.register(this, SENDER_ID); çağrılır ancak GCMIntentService'den onRegistered() hiç çağrılmaz. Bilmiyorum NEDEN.on GCMIntentService'denRegistered() hiç çağrılmadı

Bu benim Logcat

01-17 11:03:00.015: D/GCMRegistrar(3509): resetting backoff for com.abc.xyz.ui.activity 
01-17 11:03:03.210: V/GCMRegistrar(3509): Registering app com.abc.xyz.ui.activity of senders 964256581311 
01-17 11:03:06.070: V/GCMBroadcastReceiver(3509): onReceive: com.google.android.c2dm.intent.REGISTRATION 
01-17 11:03:06.070: V/GCMBroadcastReceiver(3509): GCM IntentService class: com.abc.xyz.ui.activity.GCMIntentService 
01-17 11:03:06.070: V/GCMBaseIntentService(3509): Acquiring wakelock 

ve bu benim tam tezahür ben yanlış ve onRegistered() neden asla denir bilmiyorum

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

    <uses-sdk 
     android:minSdkVersion="11" android:targetSdkVersion="16"/> 
    <uses-feature 
     android:name="android.hardware.usb.host"/> 

    <!-- This app has permission to register and receive data message. --> 
    <uses-permission 
     android:name="com.google.android.c2dm.permission.RECEIVE" /> 

    <uses-permission 
     android:name="android.permission.INTERNET" /> 
    <uses-permission 
     android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission 
     android:name="android.permission.GET_TASKS" /> 
    <uses-permission 
     android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission 
     android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission 
     android:name="android.permission.ACCESS_WIFI_STATE"/> 
    <uses-permission 
     android:name="android.permission.CALL_PHONE" /> 
    <uses-permission 
     android:name="android.permission.BLUETOOTH" /> 

    <!-- GCM requires a Google account. --> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 

    <!-- Keeps the processor from sleeping when a message is received. --> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 

    <!-- 
    Creates a custom permission so only this app can receive its messages. 

    NOTE: the permission *must* be called PACKAGE.permission.C2D_MESSAGE, 
      where PACKAGE is the application's package name. 
    --> 
    <uses-permission 
     android:name="com.abc.xyz.ui.activity.permission.C2D_MESSAGE" /> 
    <permission 
     android:name="com.abc.xyz.ui.activity.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" />  
    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Holo.Light" 
     android:name="com.abc.xyz.MyApplication" 
     android:allowBackup="false"> 
     <activity 
      android:name=".StartupActivity" 
      android:noHistory="true" 
      android:label="@string/title_startup_screen" 
      android:configChanges="orientation"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".LoginActivity" 
      android:windowSoftInputMode="stateAlwaysVisible|adjustResize" 
      android:label="@string/title_login_screen" 
      android:configChanges="orientation"> 
     </activity> 
     //my other activity defination 

     <!-- 
      BroadcastReceiver that will receive intents from GCM 
      services and handle them to the custom IntentService. 

      The com.google.android.c2dm.permission.SEND permission is necessary 
      so only GCM services can send data messages for the app. 
     --> 
     <receiver 
      android:name="com.google.android.gcm.GCMBroadcastReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <!-- Receives the actual messages. --> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <!-- Receives the registration id. --> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
       <category android:name="com.abc.xyz.ui.activity" /> 
      </intent-filter> 
     </receiver> 

     <!-- 
      Application-specific subclass of GCMBaseIntentService that will 
      handle received messages. 

      By default, it must be named .GCMIntentService, unless the 
      application uses a custom BroadcastReceiver that redefines its name. 
     --> 
     <service android:name="com.abc.xyz.ui.activity.GCMIntentService" /> 

    </application> 
</manifest> 

. Herhangi bir yardım takdir edilecektir. Ben servis bile denir önermek için LogCat bazı günlükleri eksik

: yapıştırarak kod açıklamalarda zorlukla okunabilen çünkü

+0

Arandığını nasıl doğrularsınız? Oh ve hangi yöntemden bahsediyorsun? Başlık diyor ki, kayıtlı bir kişi ... ... "Aldatıcı" yazıyor ... – WarrenFaith

+0

Sry, değişeceğim. OnRegistered() yöntem adıdır. Ve bir günlük ve hata ayıklama noktası koymuş. Ve hiçbiri geliyor. – Android

cevap

2

Cevap.

GCMBroadcastReceiver V onReceive: com.google.android.c2dm.intent.REGISTRATION 
GCMBroadcastReceiver V GCM IntentService class: com.package.android.app.GCMIntentService 
GCMBaseIntentService V Acquiring wakelock 
GCMBaseIntentService V Intent service name: GCMIntentService-DynamicSenderIds-1 

Özellikle son satırı eksik veya yapıştırmak için unutmuş: kaydederken benim LogCat içinde bu var. Tüm LogCat'ı ​​gönderdiğinizden emin misiniz? Bir şeyleri kaçırmadığınızdan emin olmak için GCM filtresini kullanın.

Güncelleme yorum olarak bahsedilen OP olarak, o daha fazlasını yapmak için hizmeti kullanılır. Bu bir şekilde GCM işlevselliğine müdahale etti ve bunu çalıştığı iki hizmete ayırdıktan sonra. Alınan dersler: GCMIntentService'i GCM'den başka bir şey için kullanmayın.

+0

Hayır, logcat ile ilgili hiçbir şeyi kaçırmadım, onun sadece bu son satırı asla benim durumumda değil. Neden arandığını belirtebilir misiniz? – Android

+0

GCMIntentService, paket düzeyindedir (manifest dosyalarınızın başında tanımlanmış olan)? – WarrenFaith

+0

yup. diğer etkinlik ve manifest etiketiyle tanımlanmış bir paket, yani com.abc.xyz.ui.activity – Android

10

Başka bir yazıyla sorunu çözdüm. Ben kök paketinin de bu sınıfı koymak istemiyordu çünkü benim GCMIntentService Sınıf, bunun yerine. Bu bir soruna neden gibi görünüyor "MY_PACKAGE.gcm de koymak ve dokümantasyon olarak

<service android:name="MY_PACKAGE.gcm.GCMIntentService" /> 

olarak benim manifest'te tanımlandı Ben işe yaradı kök paketine taşındığında

Yani aşağıdaki niyet hizmet

<service android:name=".GCMIntentService" /> 

ekle diyor! o farklı. sen GCMBroadcastReceiver alt sınıf gereken başka istediğiniz yere GCMIntentServiceSubclass koymak için bir yol ve adı yoktur ve c yapmak manifesto ve alt sınıfta diğer post'da gösterildiği gibi askıda kalıyor.

+0

Bu benim sorunumdu. 3 saatlik hata ayıklamasından sonra AndroidManifest'e geldi! – WOUNDEDStevenJones

+0

Teşekkür ederim! Bu bana yardımcı oldu :) – nithinreddy

+0

Vay! .... bu işe yarıyor. Bu "my_package" "gcmIntent" koyamıyorum rahatsız edici :( –

İlgili konular