我无法在Android手机上获得位置信息

时间:2015-07-23 03:16:14

标签: android gps location

    public class LocationService extends Service {


        private Handler mHandler = new Handler();
        private Timer mTimer = null;
        private int mCount = 0;

        public static final long NOTIFY_INTERVAL = 10 * 1000;

        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }

        @Override
        public void onCreate() {
            // cancel if already existed
            if (mTimer != null) {
                mTimer.cancel();
            } else {
                // recreate new
                mTimer = new Timer();
            }


            // schedule task
            mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, NOTIFY_INTERVAL);



        }

        @Override
        public void onDestroy() {
            mTimer.cancel();
        }

        private class TimeDisplayTimerTask extends TimerTask implements LocationListener {

            @Override
            public void run() {

                mHandler.post(new Runnable() {

                    @Override
                    public void run() {

                        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10 * 1000, 0,
                                TimeDisplayTimerTask.this);

                    }

                });
            }

            @Override
            public void onLocationChanged(Location location) {
                // TODO Auto-generated method stub
                if (location != null) {
                    Toast.makeText(getApplicationContext(), Double.toString(location.getLat(), Toast.LENGTH_LONG).show();
                    Toast.makeText(getApplicationContext(), Double.toString(location.getLng(), Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(getApplicationContext(), "Cant Get Location", Toast.LENGTH_LONG).show();
                }

            }

            @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

            }

        }

此代码在模拟器上正常工作。我可以每隔10秒获得一次位置。但是当我在真实手机上测试它时,我根本看不到任何东西。这段代码有什么问题吗?请告诉我如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

您是否可以验证您的服务是否未被设备在后台杀死?

(您可以在设置>应用>运行标签> [您的应用名称]上看到此信息。那里应该有进程计数和服务计数)

如果在后台查杀服务,Android设备有自己的方式。如果是这种情况,您应该在前台开始服务。为了防止它被杀死。

你怎么问?您应该在服务开始时添加此内容:

Notification notification = new Notification();
startForeground(1, notification);

你问的通知是什么?当您的应用程序处于后台时,这会提示用户,您可以用此替换您的toast。这是与此相关的链接。检查接受的答案。

Android - implementing startForeground for a service?