我在android上从事GCM的工作。通过使用以下异步注册设备的代码,我完成了设备到GCM的注册。
private void registerInBackground() {
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
String msg = "";
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(context);
}
regid = gcm.register(SENDER_ID);
msg = "Device registered, registration ID=" + regid;
storeRegistrationId(context, regid);
msg="Registration success. Regid: "+regid;
} catch (IOException ex) {
msg = "Error :" + ex.getMessage();
// If there is an error, don't just keep trying to register.
// Require the user to click a button again, or perform
// exponential back-off.
}
return msg;
}
@Override
protected void onPostExecute(String msg) {
Log.e("GCM", msg);
}
}.execute(null, null, null);
}注册已在registrationActivity中完成,现在我想注销设备。注销命令由服务端app发送,android端接收。如何从处理收到消息的活动(mdmActivity)中注销设备。应该是asyn还是sync?
为registrationActivity创建一个对象并使用该对象从mdmActivity调用unregisterInBackground函数是错误的吗?
RegistrationActivity reg=new RegistrationActivity();
reg.unregisterInBackground();registrationActivity中的unregisterInBackground函数如下:
protected void unregisterInBackground() {
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
String msg = "";
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(context);
}
gcm.unregister();
msg = "Device unregistered, registration ID=" + regid;
// delete the regID
deleteRegistrationId(context, regid);
} catch (IOException ex) {
msg = "Error :" + ex.getMessage();
}
return msg;
}
@Override
protected void onPostExecute(String msg) {
Log.e("unregistration", msg);
}
}.execute(null, null, null);
}需要你的帮助!!提前谢谢。
发布于 2015-03-01 06:00:25
像register()一样,unregister()也在阻塞。因此,您真的需要在后台线程中运行它,类似于使用AsyncTask的方式。
您是在GCM实例上调用它的,所以我认为只要您有那个gcm实例,就可以从任何活动调用它。
您可能希望在实现注销功能之前读取this。
https://stackoverflow.com/questions/22605789
复制相似问题