我正在使用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中完成 现在我要取消注册设备。 取消注册命令由服务器应用程序发送,在android端接收。 如何从我处理收到的消息的活动(mdmActivity)中取消注册设备。 是否应该是asyn或sync ??
为注册活动创建一个对象并使用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);
}
需要你的帮助!!提前致谢。
答案 0 :(得分:0)
unregister()
也在阻止,例如register()
。因此,您确实需要在后台线程中运行它,类似于使用AsyncTask的方式。
你在GCM实例上调用它,所以只要你有gcm
个实例,我认为可以从任何一个活动中调用它。
在实施取消注册功能之前,您可能需要阅读this。