2015-03-17 3 views
1

Я пытаюсь заставить GCM работать с устройством с Android 4.0.4. Прежде всего, отправка с устройства на сервер на другое устройство не проблема, это приемная часть, которая не будет работать. Во-вторых, я также работаю с устройством с Android 5, и на этом телефоне все работает отлично. Я думаю, что это может иметь какое-то отношение к устройству, но я не уверен (MEDION p4013). Это android 4.0.4, поэтому вам не нужна учетная запись google, чтобы она работала, но я также активировал учетную запись на телефоне, но все равно никакого результата.GCM не получает сообщения на устройстве android 4.0.4

вот мой манифест:

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.BLUETOOTH" /> 
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS"/> 
<uses-permission android:name="android.permission.WAKE_LOCK"/> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/> 

<permission android:name="com.example.tom.stapp3.permission.C2D_MESSAGE" 
    android:protectionLevel="signature"/> 
<uses-permission android:name="com.example.tom.stapp3.permission.C2D_MESSAGE"/> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" 
    android:name=".application.StApp"> 

    <receiver android:name=".gcm.GCMBroadCastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND"> 

     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE"/> 
      <category android:name="com.example.tom.stapp3"/> 
     </intent-filter> 
    </receiver> 

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

    <service 
     android:name=".service.ShimmerService" 
     android:enabled="true"> 
    </service> 

    <activity 
     android:name=".activity.FragmentViewer" 
     android:label="Stapp 3" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".activity.ProfileView" 
     android:label="@string/title_activity_profile_view"> 
    </activity> 
    <activity 
     android:name=".activity.LeaderboardView" 
     android:label="@string/title_activity_leaderboard_view" 
     android:launchMode="singleTop"> 
    </activity> 
    <activity android:name=".activity.StrangerView" 
     android:label="@string/title_activity_stranger_view"> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.example.tom.stapp3.activity.LeaderboardView" /> 
    </activity> 
    <activity 
     android:name=".activity.ConnectionView" 
     android:label="@string/title_activity_connection_view" > 
    </activity> 

    <activity 
     android:name=".activity.QuestList" 
     android:label="@string/title_activity_quest_view" > 
    </activity> 
    <activity 
     android:name=".activity.SoloQuestDescription" 
     android:label="@string/title_activity_quest_description" > 
    </activity> 
    <activity 
     android:name=".activity.GraphView" 
     android:configChanges="orientation|screenSize" 
     android:label="@string/title_activity_graph"> 
    </activity> 
    <activity 
     android:name=".activity.GCMTestActivity" 
     android:label="@string/title_activity_internet__connection" > 
    </activity> 
</application> 

широковещательный приемник:

 @Override 
     public void onReceive(Context context, Intent intent) { 
      ComponentName comp = new ComponentName(context.getPackageName(), GCMMessageHandler.class.getName()); 
      Log.d("received", "message"); 
      startWakefulService(context, intent.setComponent(comp)); 
      setResultCode(Activity.RESULT_OK); 
     } 

и обработчик:

private Handler handler; 

public GCMMessageHandler() { 
    super("GCMMessageHandler"); 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    handler = new Handler(); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    Bundle extras = intent.getExtras(); 
    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this); 
    String messageType = gcm.getMessageType(intent); 
    final int challengeId = Integer.parseInt(extras.getString("challenge_id")); 
    final String message = extras.getString("message"); 
    handler.post(new Runnable() { 
     @Override 
     public void run() { 
      if(challengeId == -1) { 
       Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); 
      } else { 
       //TODO implementatie 
      } 
     } 
    }); 
    GCMBroadCastReceiver.completeWakefulIntent(intent); 
} 
+0

Установлено ли на этом устройстве Google Play Store или Google Play Services? – Selvin

+0

Да, устройство установлено. Теперь я сделал работу вне проекта. Поэтому, если верхний код находится в другом проекте, он работает нормально. Я могу получать сообщения. Но когда я реализую его в своем оригинальном проекте, он не работает, даже если код тот же ... Я действительно не знаю, что происходит не так !!!! –

ответ

1

хорошо я нашел,

проблема была в build.gradle приложения. Приложение не соответствовало имени пакета приложения. Очевидно, что с более старыми версиями android у вас возникает проблема, но с более новыми версиями она меняет ее где-то автоматически.

Смежные вопросы