Android 处理GCM发送的意向时出错
在处理GCM时,我在“”类中出现了一些错误。 错误出现在这里:Android 处理GCM发送的意向时出错,android,google-cloud-messaging,Android,Google Cloud Messaging,在处理GCM时,我在“”类中出现了一些错误。 错误出现在这里: onHandleIntent(Intent intent) “无法从GCMBasEventService重写最终方法” 类型中的方法handleRegistration(上下文、意图) GCMBaseIntentService不适用于参数(意图)” 类型的方法handleMessage(Intent)未定义 “网络服务” 阶级 请参阅GCM谷歌教程您不应该覆盖GCMBaseIntentService的最终方法。您只需要该基类的o
onHandleIntent(Intent intent)
“无法从GCMBasEventService重写最终方法”
类型中的方法handleRegistration(上下文、意图)
GCMBaseIntentService不适用于参数(意图)”
类型的方法handleMessage(Intent)未定义
“网络服务”
阶级
请参阅GCM谷歌教程您不应该覆盖GCMBaseIntentService的最终方法。您只需要该基类的ovveride回调方法。以下是一个例子:
public class GCMIntentService extends GCMBaseIntentService {
private static final String GCM_SENDER_ID = "your_sender_id";
public GCMIntentService() {
super();
}
@Override
protected void onRegistered(Context context, String gcmDeviceToken) {
// remember and save somewhere "gcmDeviceToken"
}
@Override
protected void onUnregistered(Context context, String s) {
// Push unregistered processing
}
@Override
protected void onError(Context context, String errorId) {
// push error processing
}
@Override
protected void onMessage(Context context, Intent intent) {
// process Push message
}
public static void registerInGCMService(Context context) {
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;
}
}
}
更新:请注意-您应该用自己的更改GCM\u SENDER\u ID常量的值,它应该是数值,类似于“1234567890123”您尝试覆盖私有最终方法handleRegistration(intent);删除HandleIntent()函数并使用onRegistered()、onnRegistered()、OnMessage等。在onRegistered()、onnRegistered()、OnMessage等上,我不添加任何代码或什么?在此处处理注册:onRegistered(){hande registration code}而不是handleRegistration(intent);是的,但我删除@override时出错。我编辑了代码,您可以检查,我希望如果您以应答方式编写代码,则此错误显示gcm_消息无法解决或不是字段。当然,如果无法解决,则不是字段,因为这是我的自定义日志实现。好的,我已经删除了这个类的所有事件。上面的代码在没有记录器的情况下可以正常工作。
handleMessage
public final void onHandleIntent(Intent intent) {
try {
String action = intent.getAction();
if (action.equals("com.google.android.c2dm.intent.REGISTRATION")) {
handleRegistration(intent);
} else if (action.equals("com.google.android.c2dm.intent.RECEIVE")) {
handleMessage(intent);
}
} finally {
synchronized (LOCK) {
sWakeLock.release();
}
}
}
package com.example.elarabygroup;
import com.google.android.gcm.GCMBaseIntentService;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
import android.util.Log;
public class GCMIntenetService extends GCMBaseIntentService {
public static String TAG = "GCMIntentService";
private static PowerManager.WakeLock sWakeLock;
private static final Object LOCK = GCMIntenetService.class;
/*Handling Intents sent by GCM*/
static void runIntentInService(Context context, Intent intent) {
synchronized (LOCK) {
if (sWakeLock == null) {
PowerManager pm = (PowerManager) context
.getSystemService(Context.POWER_SERVICE);
sWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"my_wakelock");
}
}
sWakeLock.acquire();
intent.setClassName(context, GCMIntenetService.class.getName());
context.startService(intent);
}
public GCMIntenetService(String senderId) {
super(senderId);
// TODO Auto-generated constructor stub
Log.d(TAG, "[GCMIntentService] start - sender Id : " + senderId);
}
@Override
protected void onError(Context arg0, String arg1) {
Log.d("onError", arg1);
}
@Override
protected boolean onRecoverableError(Context context, String errorId) {
Log.d("onRecoverableError", errorId);
return false;
}
@Override
/*
* protected void onMessage(Context arg0, Intent arg1) { Log.d("onMessage",
* String.valueOf(arg1)); }
*/
protected void onMessage(Context arg0, Intent arg1) {
Log.d("GCM", "RECIEVED A MESSAGE");
// Get the data from intent and send to notificaion bar
generateNotification(arg0, arg1.getStringExtra("**notificaion**"));
}
private void generateNotification(Context arg0, String stringExtra) {
// TODO Auto-generated method stub
}
@Override
protected void onRegistered(intent) {
try {
String action = intent.getAction();
if (action.equals("com.google.android.c2dm.intent.REGISTRATION")) {
handleRegistration(intent);
} else if (action.equals("com.google.android.c2dm.intent.RECEIVE")) {
handleMessage(intent);
}
} finally {
synchronized (LOCK) {
sWakeLock.release();
}
}
}
@Override
protected void onUnregistered(Context arg0, String arg1) {
Log.d("onUnregistered", arg1);
}
}
@Override
protected void onRegistered(Context context, String registrationId) {
Log.i(TAG, "Device registered: regId = " + registrationId);
GCMRegistrar.setRegisteredOnServer(context, true);
}
@Override
protected void onMessage(Context context, Intent intent) {
Log.i(TAG, "Received message");
Log.i(TAG, "EXTRAS" + intent.getExtras());
String message = getString(R.string.gcm_message);
// notifies user about message
}
@Override
protected void onUnregistered(Context context, String registrationId) {
Log.i(TAG, "Device unregistered");
if (GCMRegistrar.isRegisteredOnServer(context)) {
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");
}
}
public class GCMIntentService extends GCMBaseIntentService {
private static final String GCM_SENDER_ID = "your_sender_id";
public GCMIntentService() {
super();
}
@Override
protected void onRegistered(Context context, String gcmDeviceToken) {
// remember and save somewhere "gcmDeviceToken"
}
@Override
protected void onUnregistered(Context context, String s) {
// Push unregistered processing
}
@Override
protected void onError(Context context, String errorId) {
// push error processing
}
@Override
protected void onMessage(Context context, Intent intent) {
// process Push message
}
public static void registerInGCMService(Context context) {
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;
}
}
}