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();
}
Другие вопросы по тегам