【问题标题】:LocationListener is no calling onLocationChangedLocationListener 没有调用 onLocationChanged
【发布时间】:2015-04-21 07:54:36
【问题描述】:
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

        }




    }

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

 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);
    }

【问题讨论】:

    标签: android location listener android-location


    【解决方案1】:

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

    您还可以覆盖方法 onStartCommand 并使用 START_STICKY 值。

        @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;
        }
    

    更新1

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

    如果进程名称以小写字符开头,则服务 将在该名称的全局进程中运行,前提是它具有 允许这样做。

    例如:

        <service
            android:name=".LocationService"
            android:process="myLocationService" [...] >
            [...]
        </service>
    

    【讨论】:

    • 不,我没有停止我的服务我已经尝试过服务也在运行,但是位置监听器已经停止给我任何更新
    • “停止提供任何更新”,因为在 logcat 中没有显示经纬度的日志,或者没有显示 toast 或两者都有?
    • 否 实际上,当应用程序处于后台时,它可以进行位置更改并显示 toast 或日志,但是当我关闭我的应用程序时,服务的 gps 图标会关闭,现在它不会进行任何更新,直到我再次启动活动
    • 如何关闭应用程序?
    • 这样做你会杀死所有的应用程序进程,所以服务被杀死,我会更新我的答案
    猜你喜欢
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2013-03-22
    • 2017-05-14
    • 2015-10-10
    • 2016-11-14
    相关资源
    最近更新 更多