我无法在 Android 真实手机上获取位置

2024-02-08

    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 秒就能获取一次位置信息。但是当我在真实手机上测试它时,我根本看不到任何东西出现。这段代码有什么问题吗?请告诉我如何解决这个问题。


您可以验证您的服务没有被后台设备杀死吗?

(您可以在“设置”>“应用程序”>“运行”选项卡>“[您的应用程序名称]”中看到这一点,那里应该有进程计数和服务计数)

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

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

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

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

Android - 为服务实现startForeground? https://stackoverflow.com/questions/6397754/android-implementing-startforeground-for-a-service

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我无法在 Android 真实手机上获取位置 的相关文章

随机推荐