Ответ 1
сначала установите цель эмулятора в Google API и добавьте в свой эмулятор учетную запись google.
У меня была служба GCM в моем приложении, я сделал свой код после повторных повторных встреч с элементами, и когда я пытаюсь проверить код на своем эмуляторе, я не нашел никакой информации о регистре, которая говорит мне, что мой эмулятор зарегистрирован. Также я создал свою учетную запись в Google API для повторной публикации любых отчетов, но я ничего не нашел. Поэтому мне нужна ваша помощь:
1, пожалуйста, проверьте мой код и до моего, когда ошибка я отвечу вам с полным примером:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.elarabygroup"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<permission
android:name="com.example.elarabygroup.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.elarabygroup.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<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" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".ElarabyGroup"
android:label="@string/title_activity_elaraby_group" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
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="com.example.elarabygroup" />
</intent-filter>
</receiver>
<service android:name=".GCMIntentService" />
<!--
android:name=".GCMIntentService"
android:enabled="true" />
-->
</application>
</manifest>
package com.example.elarabygroup;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;
import com.google.android.gcm.GCMRegistrar;
public class ElarabyGroup extends Activity {
private String TAG;
private String SENDER_ID = "222874571774";
private WebView webView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_elaraby_group);
try {
Intent registrationIntent = new Intent(
"com.google.android.c2dm.intent.REGISTER");
/* Registering for GCM /An Android application needs to register with GCM servers before it can receive messages*/
registrationIntent.putExtra("app",
PendingIntent.getBroadcast(this, 0, new Intent(), 0));
registrationIntent.putExtra("sender", SENDER_ID);
startService(registrationIntent);
Log.i(TAG, "[checkNotifRegistration] checkDevice");
GCMRegistrar.checkDevice(this);
Log.i(TAG, "[checkNotifRegistration] checkManifest");
GCMRegistrar.checkManifest(this);
if (GCMRegistrar.isRegistered(this)) {
Log.i(TAG,
"[checkNotifRegistration] reg id : "
+ GCMRegistrar.getRegistrationId(this));
}
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
// SENDER_ID is my project id into google account url
GCMRegistrar.register(this, SENDER_ID);
Log.i(TAG,
"[checkNotifRegistration] reg id : "
+ GCMRegistrar.getRegistrationId(this));
} else {
Log.i(TAG, "[checkNotifRegistration] already registered as : "
+ regId);
}
} catch (Exception e) {
Log.e(TAG, "[checkNotifRegistration] Exception : " + e.getMessage());
e.printStackTrace();
}
/*
* GCMRegistrar.checkDevice(this); GCMRegistrar.checkManifest(this);
*
*
* final String regId = GCMRegistrar.getRegistrationId(this); if
* (regId.equals("")) { GCMRegistrar.register(this, "1111111111"); }
* else { Log.v(TAG, "Already registered"); }
*/
try {
ConnectivityManager con = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (con.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED
&& con.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("No Internet connection");
AlertDialog alert = builder.create();
alert.show();
} else
{
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://m.elarabygroup.com");
}
} catch (Exception e) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(e.getMessage().toString());
AlertDialog alert = builder.create();
String url = "http://m.elarabygroup.com/";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
}
/*
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public final void onReceive(Context context, Intent intent) {
GCMIntenetService.runIntentInService(context, intent);
setResult(Activity.RESULT_OK, null, null);
}
}
*/
}
/*
* @Override public boolean onCreateOptionsMenu(Menu menu) {
* getMenuInflater().inflate(R.menu.activity_elaraby_group, menu); return true;
* } }
*/
package com.example.elarabygroup;
import com.google.android.gcm.GCMBaseIntentService;
import com.google.android.gcm.GCMRegistrar;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
import android.provider.Settings.Secure;
import android.util.Log;
public class GCMIntenetService extends GCMBaseIntentService {
private static String GCM_SENDER_ID = "1111111111111";
public GCMIntenetService() {
super();
}
@Override
protected void onRegistered(Context context, String registrationId) {
Log.i(TAG, "Device registered: regId = " + registrationId);
GCMRegistrar.setRegisteredOnServer(context, true);
}
@Override
protected void onUnregistered(Context context, String registrationId) {
Log.i(TAG, "Device unregistered");
if (GCMRegistrar.isRegisteredOnServer(context)) {
String regId = "";
Log.i(TAG, "unregistering device (regId = " + regId + ")");
GCMRegistrar.setRegisteredOnServer(context, false);
} else {
// This callback results from the call to unregister made on
// ServerUtilities when the registration to the server failed.
Log.i(TAG, "Ignoring unregister callback");
}
}
@Override
protected void onError(Context context, String errorId) {
// push error processing
}
@Override
protected void onMessage(Context arg0, Intent arg1) {
Log.i(TAG, "Received message");
Log.i(TAG, "EXTRAS" + arg1.getExtras());
// String message = getString(R.string.gcm_message);
generateNotification(arg0,
arg1.getStringExtra("Please download our new updates"));
// notifies user about message
}
private void generateNotification(Context arg0, String stringExtra) {
// TODO Auto-generated method stub
}
public static void registerInGCMService(Context context) {
GCM_SENDER_ID = Secure.getString(context.getContentResolver(),
Secure.ANDROID_ID);
if (!checkIsGCMServiceAvailable(context)) {
return;
}
final String regId = GCMRegistrar.getRegistrationId(context);
if (regId.equals("")) {
try {
GCMRegistrar.register(context, GCM_SENDER_ID);
} catch (Exception ex) {
}
} else {
// Already registered
}
}
public static boolean checkIsGCMServiceAvailable(Context context) {
try {
GCMRegistrar.checkDevice(context);
GCMRegistrar.checkManifest(context);
return true;
} catch (Throwable th) {
return false;
}
}
}
Я приложил сообщение log log
2- о статусе в моей учетной записи Google API
Статус обслуживания Google Cloud Messaging для Android. Не известны проблемы.
сначала установите цель эмулятора в Google API и добавьте в свой эмулятор учетную запись google.
добавить аккаунт google в свой эмулятор:
setting- > account & sync- > Добавить аккаунт (из комментария @curious_mind)
Если эмулятор работает под управлением Android 4.0.4 или новее, этот шаг является необязательным, так как GCM не требует учетной записи из этой версии.
для меня это устранило проблему.
просто вы можете использовать этот эмулятор и протестировать свое приложение в этом эмуляторе, я думаю, что он будет работать нормально.
Вы можете использовать эмулятор для функций GCM, но вам нужно отслеживать некоторые моменты, так как ваша версия эмулятора должна быть 2,2 или выше и содержит API Google (обязательно). После того как вы создали этот эмулятор AVD, выполните следующие шаги в эмуляторе: 1.) goto Настройки → Учетные записи и синхронизация, 2.) затем добавьте учетную запись Google и синхронизация включена. 3.) Определить разрешение интернета в файле манифеста
<manifest xlmns:android...>
...
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>
4.) Определите связанные с GCM разрешения в манифесте
Как только это будет сделано, вы должны быть готовы зарегистрироваться для GCM и получать от него сообщения.
Перейдите в папку Android SDK и откройте диспетчер SDK и установите Google Cloud Messaging для Android Library в разделе "Дополнительно". (Если вы не видите, что Google Cloud Messaging для Android-библиотеки обновляет ваш менеджер SDK до последней версии)
После установки библиотеки он создаст файл gcm.jar в вашем файле Andoird_SDK_Folder\extras\google\gcm\gcm-client\dist. Позже вам нужно добавить этот файл .jar в ваш проект Android.
Сначала установите целевой эмулятор в Google API.
После запуска эмулятора нажмите кнопку Menu, чтобы перейти к настройкам. Выберите "Учетные записи и синхронизация". Затем нажмите кнопку "Добавить учетную запись" и добавьте учетную запись Google
Наконец, проверьте свое приложение на симуляторе.