Я пытаюсь реализовать метод, в котором мое приложение будет отслеживать, когда пользователь открыл или закрыл мое приложение, обновив базу данных mongodb. Я понимаю, что когда начинается действие, методы onCreate() или onResume() всегда запускаются, и когда действие закрывается, вызовы onPause() или onStop() вызывают.Отслеживать пользователя при закрытии/запуске приложения
То, что я пробовал до сих пор это: В любой деятельности моего заявления я звоню этот AsyncTask:
public void updateOnline(String fbid, boolean login){
new updateOnlineAsync(fbid, login).execute();
}
public class updateOnlineAsync extends AsyncTask<Void, Void, Void>{
String fbid;
boolean login;
public updateOnlineAsync(String fbid, boolean login){
this.fbid=fbid;
this.login=login;
}
@Override
protected Void doInBackground(Void... params) {
BasicDBObject query = new BasicDBObject();
query.put("fbid", this.fbid);
Document myDoc = fb_users.find(query).first();
if(login){
Log.d("...", "x");
Document listItem = new Document("online", "0");
Document updateQuery = new Document("$set", listItem);
fb_users.updateOne(myDoc, updateQuery);
}else{
Log.d("...", "y");
Document listItem = new Document("online", "1");
Document updateQuery = new Document("$set", listItem);
fb_users.updateOne(myDoc, updateQuery);
}
return null;
}
}
В OnCreate(), onResume() методы я использую:
ServerRequest serverRequest = new ServerRequest(this);
Profile profile = Profile.getCurrentProfile();
serverRequest.updateOnline(profile.getId(), false);
и OnPause(), OnStop() методы я использую:
ServerRequest serverRequest = new ServerRequest(this);
Profile profile = Profile.getCurrentProfile();
serverRequest.updateOnline(profile.getId(), true);
Я думаю, что это должно работать и обновлять свой документ остроумие h пользователь онлайн/оффлайн ситуации, но это не так. Интересно, это из-за того, что AsyncTask не работает, когда приложение находится в фоновом режиме или, может быть, я делаю что-то неправильно. В любом случае, любая помощь очень ценится.
РЕДАКТИРОВАТЬ
Log.d() в AsyncTask ptints, но не у х. Там для AsyncTask выполняется для метода onCreate(), но не для onStop()
Я только что протестировал, изменив активность в своем приложении. Онлайн-поле обновляется в моей базе данных, когда я изменяю активность в своем приложении или когда я нажимаю среднюю кнопку на своем смартфоне (отправляя ее на задний план). Метод не работает только тогда, когда я полностью закрываю его.
Не видя, что такое «BasicDBObject», это может быть проблемой. Но если ваш журнал попадает в блок «y», но не «x», вы уверены, что вы вызываете 'updateOnline()' с истинным значением для входа для начала? Вы отлаживали приложение и выполняли код за строкой? Было ли значение переменных, как вы ожидали на каждом шаге? –
Я просто протестировал, изменив активность в своем приложении.Онлайн-поле обновляется в моей базе данных, когда я изменяю активность в своем приложении или когда я нажимаю среднюю кнопку на своем смартфоне (отправляя ее на задний план). Метод не работает только тогда, когда я полностью закрываю его –