开发者

Android Service not receiving Location Updates

开发者 https://www.devze.com 2023-03-19 12:21 出处:网络
Attempting to get LocationUpdates in my Service, however, it doesnt ever seem to fire the LocationListener.

Attempting to get LocationUpdates in my Service, however, it doesnt ever seem to fire the LocationListener.

My Service starts a thread, which then loops with a Handler.postDelayed() - I originally used sleep(30000), however I thought this may have been preventing the locationUpdates. All 开发者_如何学Pythonthe service does is launch this thread - and onStartCommand returns STICKY to keep it running:

public class TST extends Thread {

    final int DefaultNetworkTick = 120000; // 2 minutes
    final int DefaultLocationTick = 20000; //600000;  
    boolean CustomLocationUpdateTick = false; // If the network requests faster updates
    int CustomLocationUpdateTickMs = 600000; // Default 10 minutes

    public boolean kill = false;
    public Context context;

    Handler handler  = new Handler();

    Date nextNetworkReadTick;

    @Override
    public void run() {        
        Log.i("TST", "Start run() iteration");
        // Set the ticks to the appropriate values
        // Network gets read every 2 minutes

        nextNetworkReadTick = new Date();
        nextNetworkReadTick.setTime(nextNetworkReadTick.getTime() + DefaultNetworkTick);
        Log.i("TST", "Set next Network tick to " + nextNetworkReadTick.toString());
        Looper.prepare();
        Log.i("TST", "Performing location update setup...");
        SetupLocationListenerDefault();
        handler.postDelayed(runFunc, 2000);
        Looper.loop();
    }

    // We do our networking and stuff in here
    public Runnable runFunc = new Runnable(){
        public void run()
        {
            Log.i("TST", "run() iteration");

            if( new Date().after(nextNetworkReadTick) ) {
                // Set next tick
                nextNetworkReadTick = new Date();
                nextNetworkReadTick.setTime(nextNetworkReadTick.getTime() + DefaultNetworkTick);

                UpdateNetwork();
            }

            handler.postDelayed(runFunc, 1000);
        }
    };

    private void UpdateNetwork() {
            // TODO Auto-generated method stub
    }

    LocationManager locMgr;

    PendingIntent locationUpdateIntentPending;
    Intent locationUpdateIntent;

    LocationListener locationListener = new LocationListener()
    {
            @Override
            public void onLocationChanged(Location arg0) {
                    // TODO Auto-generated method stub
                    Log.i("TST", "OnLocationChanged: " + arg0.toString());
            }

            @Override
            public void onProviderDisabled(String provider) {
                    // TODO Auto-generated method stub
                    Log.i("TST", "OnProviderDisabled: " + provider);                
            }

            @Override
            public void onProviderEnabled(String provider) {
                    // TODO Auto-generated method stub
                    Log.i("TST", "OnProviderEnabled: " + provider);
            }

            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
                    // TODO Auto-generated method stub
                    Log.i("TST", "OnStatusChanged");
            }

    };

    private void SetupLocationListenerDefault() {
        // Reset location manager
        if( locMgr != null ) {
                locMgr.removeUpdates(locationListener);
                locMgr = null;
        }

        locMgr = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        String provider = locMgr.getBestProvider(criteria, true);

        locMgr.requestLocationUpdates(provider, DefaultLocationTick, 0, locationListener);
    }

}


Rebooted my phone and started getting updates - seems that Android had got stuck somewhere!

0

精彩评论

暂无评论...
验证码 换一张
取 消