Android - WakeLock - местоположение POST на PUSH-уведомлении, полученном при блокировке экрана (parse.com)
Я хочу разместить свое местоположение на PushReceived, когда экран заблокирован. Мой код работает, когда экран включен. WakeLock, похоже, не работает...
При первом получении PUSH-уведомления от Parse.com экран включается, и я вижу, что появляется значок GPS. И база данных обновляется.
Но во второй раз, когда я получаю уведомление PUSH, onLocationCanged не запускается, и POST никогда не получает sendt. Почему это? Однако экран включается, и отображается значок GPS.
Evrytime Я установил отладку на этом этапе он работает:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
Какая-то асинх тастк, Мэйби?
Вот мой код:
public class PushNotificationReceiver extends ParsePushBroadcastReceiver implements LocationListener{
@Override
public void onPushReceive(Context context, Intent intent) {
//WakeLock
pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock((pm.SCREEN_BRIGHT_WAKE_LOCK | pm.FULL_WAKE_LOCK | pm.ACQUIRE_CAUSES_WAKEUP), "TAG");
wakeLock.acquire();
JSONObject pushData;
String alert = null;
String title = null;
try {
pushData = new JSONObject(intent.getStringExtra(PushNotificationReceiver.KEY_PUSH_DATA));
alert = pushData.getString("alert");
title = pushData.getString("title");
} catch (JSONException e) {}
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
//Getting LOCATION
getLocation(context, locationManager);
Intent cIntent = new Intent(PushNotificationReceiver.ACTION_PUSH_OPEN);
cIntent.putExtras(intent.getExtras());
cIntent.setPackage(context.getPackageName());
PendingIntent pContentIntent =
PendingIntent.getBroadcast(context, 0 /*just for testing*/, cIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder
.setSmallIcon(R.drawable.car190)
.setContentTitle(alert)
.setContentText(title)
.setContentIntent(pContentIntent)
.setAutoCancel(true);
NotificationManager myNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
myNotificationManager.notify(1, builder.build());
}
private void getLocation(final Context context, final LocationManager locationManager){
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
//Stop receiving LOCATION after 5 sec
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
locationManager.removeUpdates(PushNotificationReceiver.this);
//WakeLock release
wakeLock.release();
}
}, 5000);
}
@Override
public void onLocationChanged(Location location) {
currentLat = location.getLatitude() + "";
currentLng = location.getLongitude() + "";
currentDate = new Date();
String username = tabFragment1.usernameResponse;
try {
JSONObject object = new JSONObject(username);
myusername = object.getString("ID");
} catch (JSONException e) {
e.printStackTrace();
}
//POST to Database
postLocation(mainActivity.getAppContext(), currentLat, currentLng, currentDate.toString(), myusername);
}
}
1 ответ
Удали это:
//Stop receiving LOCATION after 5 sec
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
locationManager.removeUpdates(PushNotificationReceiver.this);
//WakeLock release
wakeLock.release();
}
}, 5000);
и добавить
locationManager.removeUpdates(PushNotificationReceiver.this);
wakeLock.release();
В onLocationChanged, вот так:
@Override
public void onLocationChanged(Location location) {
currentLat = location.getLatitude() + "";
currentLng = location.getLongitude() + "";
currentDate = new Date();
username = tabFragment3.userEmail;
postLocation(mainActivity.getAppContext(), currentLat, currentLng, currentDate.toString(), username);
locationManager.removeUpdates(PushNotificationReceiver.this);
wakeLock.release();
}