首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LocationListener不是调用onLocationChanged

LocationListener不是调用onLocationChanged
EN

Stack Overflow用户
提问于 2015-04-21 07:54:36
回答 1查看 815关注 0票数 0
代码语言:javascript
复制
public class LocationService extends Service{

    private LocationManager locationMangaer=null;
    private LocationListener locationListener=null; 



    private static final String TAG = "Debug";
    private Boolean flag = false;
    public static String cityName=null;
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }


    @Override
    public void onCreate() {
        super.onCreate();


        Log.d("Location Serive","Started");
        locationMangaer = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationListener = new MyLocationListener();

        flag = displayGpsStatus();
        boolean c=isOnline();
        if(flag)
        {
            locationMangaer.removeUpdates(locationListener);
            Criteria crit2 = new Criteria();
            crit2.setAccuracy(Criteria.ACCURACY_FINE);
            String provider2 = locationMangaer.getBestProvider(crit2, false);
            Toast.makeText(getApplicationContext(), provider2, Toast.LENGTH_LONG).show();
            locationMangaer.requestLocationUpdates(provider2,1, 1,locationListener);

        }
        else if(c)
        {
            locationMangaer.removeUpdates(locationListener);
            Criteria crit = new Criteria();
            crit.setPowerRequirement(Criteria.POWER_LOW);
            crit.setAccuracy(Criteria.ACCURACY_COARSE);
            String provider = locationMangaer.getBestProvider(crit, false); 
            Toast.makeText(getApplicationContext(), provider, Toast.LENGTH_LONG).show();
            locationMangaer.requestLocationUpdates(provider,1, 1,locationListener);

        }
        else
        {
            //Nothing Available
        }
        Log.d("Internet",Boolean.toString(c));

    }




    /*net Enabled or Not*/
    public boolean isOnline() {
        ConnectivityManager cm =
            (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        return netInfo != null && netInfo.isConnectedOrConnecting();
    }
    /*----------Method to Check GPS is enable or disable ------------- */
    @SuppressWarnings("deprecation")
    private Boolean displayGpsStatus() {
        ContentResolver contentResolver = getBaseContext().getContentResolver();
        boolean gpsStatus = Settings.Secure.isLocationProviderEnabled(contentResolver, LocationManager.GPS_PROVIDER);

        if (gpsStatus) {
            return true;

        } else {
            return false;
        }
    }



    /*----------Listener class to get coordinates ------------- */
    private class MyLocationListener implements LocationListener {

        @Override
        public void onLocationChanged(Location loc) {
          Log.d("Location Changed", "location:");
        Log.d("Latitude", Double.toString(loc.getLatitude()));
        Log.d("Longitude",Double.toString(loc.getLongitude()));
        Toast.makeText(getApplicationContext(), Double.toString(loc.getLatitude()), Toast.LENGTH_LONG).show();
        double p=loc.getLongitude();
        double q=loc.getLatitude();

        LocationChecker(p,q);


        }

            @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }




    }

从这个活动中,我调用了该服务,但是一旦从最近的应用程序中删除我的应用程序,通过滑动,位置侦听器就停止工作,并且不会显示任何位置更改更新,但是如果应用程序正在运行,它就可以正常工作。

代码语言:javascript
复制
 public class Dashboard extends ActionBarActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_dashboard);
                Intent l = new Intent(getApplicationContext(),LocationService.class);
                    getApplicationContext().startService(l);
    }
EN

回答 1

Stack Overflow用户

发布于 2015-04-21 08:19:38

您是否停止在onDestroy中服务您的活动?

您还可以重写方法onStartCommand并使用粘稠值。

代码语言:javascript
复制
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG, "Received start id " + startId + ": " + intent);
        // We want this service to continue running until it is explicitly
        // stopped, so return sticky.
        return START_STICKY;
    }

UPDATE1

您可以在单独的进程中启动服务。见doc:http://developer.android.com/guide/topics/manifest/service-element.html#proc

如果进程名以小写字符开头,则服务将在该名称的全局进程中运行,条件是它拥有这样做的权限。

例如:

代码语言:javascript
复制
    <service
        android:name=".LocationService"
        android:process="myLocationService" [...] >
        [...]
    </service>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29766142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档