android - com.google.android.gms.location.LocationListener 的 LocationChanged 未调用

标签 android

我正在创建一个请求 locationUpdate 的服务。但是 LocationChanged 回调仅在服务首次启动时调用,之后不调用。位置更改应在 2km 更改时调用。我做错了吗

       package com.example.qwerty;
     import com.google.android.gms.common.ConnectionResult;

        import com.google.android.gms.common.api.GoogleApiClient;

        import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;

        import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;

        import com.google.android.gms.location.LocationRequest;

        import com.google.android.gms.location.LocationServices;

        import com.google.android.gms.location.LocationListener;




        import android.os.IBinder;


        //Location Callback
        public class LocationService extends Service  implements ConnectionCallbacks,OnConnectionFailedListener  {

         private class locationListener  implements LocationListener   {

            public void addLocation(String loc){
                SharedPreferences pref= getSharedPreferences(Contant.MYPREFERENCE, MODE_PRIVATE);
                Editor edit = pref.edit();  
                String s ="";
                if(pref.contains("location")){
                      s =    pref.getString("location", "");
                     } 
                     s  = s + loc;
                     edit.putString("location",s).commit();
                    }

        public void getAddress( final double latitude , final double longitude){
                new AsyncTask<Double, Void, String>() {
                    @Override
                    protected String doInBackground(Double...params){ 
                        Geocoder geocoder = new Geocoder(LocationService.this,Locale.getDefault());
                        String result ="";
                        List<Address> addressList =null;
                        try {
                            addressList = geocoder.getFromLocation(
                                    params[0], params[1], 1);
                         if (addressList != null && addressList.size() > 0) {
                            Address address = addressList.get(0);
                            StringBuilder sb = new StringBuilder();
                            for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {
                                sb.append(address.getAddressLine(i)).append("\n");
                            }
                            sb.append(address.getLocality()).append("\n");
                            sb.append(address.getPostalCode()).append("\n");
                            sb.append(address.getCountryName());
                            result = sb.toString();
                        }
                    }
                        catch (Exception e) {
                              result =e.toString(); 
                              result  = result + " " +  latitude +  "  "+  longitude;
                        } 

                        return result;
                    }
                        @Override
                        protected void onPostExecute(String result) {   
                           addLocation(result); 
                        }
                  }.execute(latitude , longitude);
        } 
         @Override
            public void onLocationChanged(Location location) {

                if(NetworkState.isNetConnected(LocationService.this)) {
                    getAddress(location.getLatitude(), location.getLongitude());                                                        
                }else{
                    addLocation(" lat " +  location.getLatitude()+ "  long " + location.getLongitude());
                } 
            }

            }


         GoogleApiClient client  =  null;
                public LocationService() {

                }

            @Override   
            public int onStartCommand(Intent intent, int flags, int startId) {
                SharedPreferences pref= getSharedPreferences(Contant.MYPREFERENCE, MODE_PRIVATE);
                client = new GoogleApiClient.Builder(this)
                 .addApi(LocationServices.API)
                 .addConnectionCallbacks(this)
                 .addOnConnectionFailedListener(this)
                 .build();  
                 client.connect();


               return START_STICKY;


            }
              @Override
                public void onDestroy() {


             }

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

            @Override
            public void onConnected(Bundle arg0) {
                LocationRequest mLocationRequest = new LocationRequest();
                mLocationRequest.setInterval(420000);
                mLocationRequest.setSmallestDisplacement(1000);

                LocationServices.FusedLocationApi.requestLocationUpdates(client, mLocationRequest , new locationListener());

            }

            @Override
            public void onConnectionSuspended(int arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onConnectionFailed(ConnectionResult arg0) {


            }
        }

最佳答案

我有另一个适合我的解决方案。可能在不久的将来对其他人有帮助。

  1. 设置闹钟n分钟

  2. 在此警报上设置一个广播。当您收到广播时,启动一个服务,该服务将获取当前位置。

  3. 获取位置后停止该服务。

  4. 同样的事情不断发生。

关于android - com.google.android.gms.location.LocationListener 的 LocationChanged 未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32745758/

相关文章:

java - 在主线程上解析 XML,但通过 AsyncTask 下载 - "Invalid stream or encoding: android.os.NetworkOnMainThreadException"

android - 通过 Wifi 在电脑和安卓手机之间交换数据

java - Android Asynctask 和 runOnUiThread

android - 如何在选项卡上方添加行android tablayout

java - 在android中使图像循环

具有六边形触摸边界的Android六边形按钮

android - 如何在Android上实现旋转控件?

Android - 限制只有一位小数点进入 EditText

安卓布局: Why does radio button get cut off at bottom edge?

android - 如何在 onSaveInstanceState(Bundle outState) 中保存 ListView,以便我可以在 Android 中恢复它?