0
私はFusedLocationProviderを実装しています。 しかし、私は実現し、1つのアクティビティで緯度と経度を取得しましたが、私は今、別の非アクティビティクラスGetLocationActivityに実装し、Maps_activityクラスの場所データを取得します。私はデータを取得できません!アンドロイドのマップアクティビティでクラスから位置データを取得する方法は?
クラスからデータを取得するためにとにかくそこに私のマップの活動でそれを示すか。 私はクラスのデータを保存するためにsharedPrefを試しましたが、結果はありません。
P.S:GetLocationActivityが実行されなかったか、またはインスタンス化できませんでした。ここで
コード
Map_activity.javaある
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private GoogleApiClient mGoogleApiClient;
private FloatingActionButton floatingActionButton;
private static final String LIST_FRAGMENT_TAG = "list_fragment";
private static final String TAG = "list_fragment";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
floatingActionButton = (FloatingActionButton) findViewById(R.id.fab);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
final GetLocationActivity obj = new GetLocationActivity();
floatingActionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
obj.GetLocation();
}
});
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// Add a marker in Karachi and move the camera
LatLng sydney = new LatLng(24.9217531, 66.8943302);
//mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Karachi"));
mMap.animateCamera(CameraUpdateFactory.zoomTo(10.75f));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
GetLocationActivity.java
public class GetLocationActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener , com.google.android.gms.location.LocationListener {
public final static String TAG = "Application";
private GoogleApiClient mGoogleApiClient;
private Location mLastLocation;
private LocationRequest mLocationRequest;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
}
public void GetLocation()
{
try {
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(10000); // Update location every second
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
if (mLastLocation != null) {
Log.d(TAG, "onConnected: "+String.valueOf(mLastLocation.getLatitude()));
Log.d(TAG, "onConnected: "+String.valueOf(mLastLocation.getLongitude()));
}
} catch (SecurityException e) {
}
}
@Override
public void onConnected(@Nullable Bundle bundle) {
GetLocation();
}
@Override
public void onConnectionSuspended(int i) {
Toast.makeText(this, "onConnectionSuspended: " + String.valueOf(i),
Toast.LENGTH_LONG).show();
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Toast.makeText(this, "onConnectionFailed: " + connectionResult.toString(),
Toast.LENGTH_LONG).show();
}
protected void onStart() {
mGoogleApiClient.connect();
super.onStart();
}
protected void onStop() {
mGoogleApiClient.disconnect();
super.onStop();
}
@Override
public void onLocationChanged(Location location) {
}
このGetLocationActivity obj =新しいGetLocationActivity();は動作しません。たとえば、oncreateは自動的に呼び出されません。これをしないでください。単純なクラスを作成します。これまでに –
@ PavneetSinghが必要ですが、GoogleClientをクラスで実行して場所を取得する必要があります。どうやって他のクラスを走らせることができるの? –
はい、あなたはそれにコンテキストを渡す必要があります、あなたの現在のアプローチはあなたが欲しい方法で動作しないだろう、あなたはまた、活動と場所の論理クラス –