2016-06-26 13 views
1

我想每1秒更新textview中的lat和long值,並且我正在Kitkat設備上運行此應用程序。融合的位置提供者似乎並沒有按照間隔集合更新座標

觀察:可以看到位置座標沒有按照間隔更新。

「MainActivity.java」

public class MapsActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener,LocationListener { 

private final String TAG = "ravimaps"; 

private GoogleApiClient mGoogleApiClient; 
private LocationRequest mLocationRequest; 
private TextView lats; 
private TextView longs; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 
    mGoogleApiClient=new GoogleApiClient.Builder(this) 
      .addApi(LocationServices.API) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .build(); 

    lats = (TextView) findViewById(R.id.lat); 
     longs= (TextView) findViewById(R.id.Lng); 
} 

@Override 
public void onConnected(Bundle bundle) { 
    mLocationRequest=LocationRequest.create(); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    mLocationRequest.setInterval(1000); 
    if (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.ACCESS_FINE_LOCATION) 
      == PackageManager.PERMISSION_GRANTED) { 
     LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, (LocationListener) this); 
    } 

} 

@Override 
public void onLocationChanged(Location location) 
{ 
    Log.i(TAG,location.toString()); 
    lats.setText(Double.toString(location.getLatitude())); 
    longs.setText(Double.toString(location.getLongitude())); 
    } 


    @Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

} 

@Override 
protected void onStart() { 
    super.onStart(); 
    mGoogleApiClient.connect(); 


} 

@Override 
protected void onStop() { 
    mGoogleApiClient.disconnect(); 
    super.onStop(); 
} 

}

+0

你說:'可以看到位置座標沒有按照間隔進行更新.'你看到了你當前位置的座標嗎?問題沒有看到任何座標或只是沒有獲取位置更新? –

+0

我可以得到座標,但沒有更新。 – ferraro

回答

0

我定你的代碼。請在您的設備或模擬器上使用以下代碼查看您的預期結果後,請將此答案標記爲您問題的答案。幹得好!

您沒有私人的Location對象獲取最後已知/當前位置與您的GoogleApiClient和沒有LocationListener對象的要求。我加了兩個。而且我加了2個變量,你現在可以使用參數化到您請求的地點:

 float LOCATION_REFRESH_DISTANCE = 5000; 
     long LOCATION_REFRESH_TIME = 0; 

請用它下面的代碼bevor測試/編輯YOUR_PROJECT

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="YOUR_PROJECT.MainActivity"> 


<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/lat" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginLeft="47dp" 
    android:layout_marginStart="47dp" 
    android:layout_marginTop="171dp" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/Lng" 
    android:layout_centerVertical="true" /> 
</RelativeLayout> 

package YOUR_PROJECT; 

import android.Manifest; 
import android.content.pm.PackageManager; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.location.LocationRequest; 
import com.google.android.gms.location.LocationServices; 
import com.google.android.gms.maps.model.LatLng; 

public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener { 

private final String TAG = "ravimaps"; 
private LocationManager locationManager; 
private GoogleApiClient mGoogleApiClient; 
private LocationRequest mLocationRequest; 
private TextView lats; 
private TextView longs; 
private Location mLastLocation; 
LatLng newPosition; 

LocationListener mlocationListener = new LocationListener() { 
    @Override 
    public void onLocationChanged(Location location) { 
     mLastLocation=location; 

    } 

    @Override 
    public void onStatusChanged(String s, int i, Bundle bundle) { 

    } 

    @Override 
    public void onProviderEnabled(String s) { 

    } 

    @Override 
    public void onProviderDisabled(String s) { 

    } 

}; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addApi(LocationServices.API) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .build(); 
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
    lats = (TextView) findViewById(R.id.lat); 
    longs = (TextView) findViewById(R.id.Lng); 
} 

@Override 
public void onConnected(Bundle bundle) { 
    mLocationRequest = LocationRequest.create(); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    mLocationRequest.setInterval(1000); 
    if (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.ACCESS_FINE_LOCATION) 
      == PackageManager.PERMISSION_GRANTED) { 
     float LOCATION_REFRESH_DISTANCE = 5000; 
     long LOCATION_REFRESH_TIME = 0; 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, LOCATION_REFRESH_TIME, LOCATION_REFRESH_DISTANCE, mlocationListener); 
     mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
     if(mLastLocation!=null){ 
      Toast.makeText(getApplicationContext(), "YES! mLastLocation!=null", Toast.LENGTH_SHORT).show(); 
      Log.i(TAG, mLastLocation.toString()); 
      lats.setText(Double.toString(mLastLocation.getLatitude())); 
      longs.setText(Double.toString(mLastLocation.getLongitude())); 
      double latitude = mLastLocation.getLatitude(); //Save latitude in a double variable 
      double longitude = mLastLocation.getLongitude(); //Save longitude in a double variable 
      //Toast to display Coordinates 
      Toast.makeText(getApplicationContext(), "Latitude = " + latitude + "\nLongitude = " + longitude, Toast.LENGTH_SHORT).show(); 

     } 
    } 

} 


@Override 
public void onLocationChanged(Location location) { 

} 

@Override 
public void onStatusChanged(String s, int i, Bundle bundle) { 

} 

@Override 
public void onProviderEnabled(String s) { 

} 

@Override 
public void onProviderDisabled(String s) { 

} 


@Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

} 

@Override 
protected void onStart() { 
    super.onStart(); 
    mGoogleApiClient.connect(); 

} 

@Override 
protected void onStop() { 
    mGoogleApiClient.disconnect(); 
    super.onStop(); 
} 
} 

你的新(/舊?)XML文件最後但並非最不重要的:

你的新的Java文件。不要忘記:

'compile 'com.google.android.gms:play-services:+'src/build.gradle這樣的:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.4.0' 
    compile 'com.google.android.gms:play-services:+' 
} 

2.有必要的權限,您AndroidManifest.xml

我添加以下所有權限但你並不需要全部:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.READ_PROFILE" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.MOCK_LOCATION" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

備註:我專注於根據您的期望和原始代碼實施正確的行爲。此實現未優化。

相關問題