2016-05-20 16 views
0

私はアンドロイドの新機能です。私は現在の位置の経度と緯度を取得したいのですが、このコードを使用して緯度と経度を取得しました。 logcatと私はまたgoogle-services.jsonファイルapp /を移動し、mGoogleApiClientとmLastLocationを初期化しました。なぜ私は緯度と経度を見ることができないのですか?何らかのエラーが発生していません。事前にお手伝いください。 ここに誰もがここで現在の場所の緯度と経度をアンドロイドで取得できません

がMapsactivity

のコードで私を助けることができれば私のアプリ https://github.com/akashmalla07/GoogleMap の完全なコードを見てくださいされます
public class MapsActivity extends FragmentActivity implements 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener, 
     LocationListener { 

     private GoogleMap mMap; 
     AppLocationService appLocationService; 
     GoogleApiClient mGoogleApiClient; 
     private Location mLastLocation; 

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

     mLastLocation = LocationServices.FusedLocationApi 
       .getLastLocation(mGoogleApiClient); 
     setUpMapIfNeeded(); 

    } 

    private void setUpMapIfNeeded() { 
     if (mMap == null) { 
      mMap = ((SupportMapFragment) 
      getSupportFragmentManager().findFragmentById(R.id.map)) 
        .getMap(); 
      if (mMap != null) { 
       displayLocation(); 
      } 
     } 
    } 

    private void displayLocation() { 

     mLastLocation = LocationServices.FusedLocationApi 
       .getLastLocation(mGoogleApiClient); 

     if (mLastLocation != null) { 
      double latitude = mLastLocation.getLatitude(); 
      double longitude = mLastLocation.getLongitude(); 

      Log.d("result", latitude + ", " + longitude); 

     } else { 

      Log.d("result3","(Couldn't get the location. Make sure location is 
      enabled on the device)"); 
     } 
    } 

    @Override 
    public void onConnected(Bundle bundle) { 

    } 

    @Override 
    public void onConnectionSuspended(int i) { 

    } 

    @Override 
    public void onLocationChanged(Location location) { 

    } 

    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { 

    } 
} 

そして、これらは輸入

import android.location.Location; 
    import android.os.Bundle; 
    import android.support.v4.app.FragmentActivity; 
    import android.util.Log; 

    import com.google.android.gms.common.ConnectionResult; 
    import com.google.android.gms.common.api.GoogleApiClient; 
    import com.google.android.gms.location.LocationListener; 
    import com.google.android.gms.location.LocationServices; 
    import com.google.android.gms.maps.GoogleMap; 
    import com.google.android.gms.maps.SupportMapFragment; 

更新されたコードです-------------------------------- -----------

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

private static final String TAG = MapsActivity.class.getSimpleName(); 
private LocationRequest mLocationRequest; 
private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 1000; 
private GoogleMap mMap; 
AppLocationService appLocationService; 
GoogleApiClient mGoogleApiClient; 
private Location mLastLocation; 

private TextView lblLocation; 
private Button btnShowLocation, btnStartLocationUpdates; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 
    lblLocation = (TextView) findViewById(R.id.lblLocation); 
    btnShowLocation = (Button) findViewById(R.id.btnShowLocation); 
    btnStartLocationUpdates = (Button) 
     findViewById(R.id.btnLocationUpdates); 

    if (checkPlayServices()) { 

     // Building the GoogleApi client 
     buildGoogleApiClient(); 

     } 

    btnShowLocation.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      displayLocation(); 
      Log.d("clicked","yes"); 
     } 
    }); 

} 
protected synchronized void buildGoogleApiClient() { 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(LocationServices.API).build(); 
} 
private boolean checkPlayServices() { 
    int resultCode = GooglePlayServicesUtil 
      .isGooglePlayServicesAvailable(this); 
    if (resultCode != ConnectionResult.SUCCESS) { 
     if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) { 
      GooglePlayServicesUtil.getErrorDialog(resultCode, this, 
        PLAY_SERVICES_RESOLUTION_REQUEST).show(); 
     } else { 
      Toast.makeText(getApplicationContext(), 
        "This device is not supported.", Toast.LENGTH_LONG) 
        .show(); 
      finish(); 
     } 
     return false; 
    } 
    return true; 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    if (mGoogleApiClient != null) { 
     mGoogleApiClient.connect(); 
    } 
} 

@Override 
protected void onResume() { 
    super.onResume(); 

    checkPlayServices(); 

} 

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

@Override 
protected void onPause() { 
    super.onPause(); 

} 
@Override 
public void onConnectionFailed(ConnectionResult result) { 
    Log.i(TAG, "Connection failed: ConnectionResult.getErrorCode() = " 
      + result.getErrorCode()); 
} 

@Override 
public void onConnected(Bundle arg0) { 

    displayLocation(); 


} 



private void displayLocation() { 
    Log.d("after","clicked"); 
    mLastLocation = LocationServices.FusedLocationApi 
      .getLastLocation(mGoogleApiClient); 

    if (mLastLocation != null) { 
     double latitude = mLastLocation.getLatitude(); 
     double longitude = mLastLocation.getLongitude(); 

     lblLocation.setText(latitude + ", " + longitude); 
     Log.d("lat",String.valueOf(latitude)); 

    } else { 
     Log.d("lat","No lat"); 

     lblLocation 
       .setText("(Couldn't get the location. Make sure location is enabled on the device)"); 
    } 
} 

@Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onLocationChanged(Location location) { 

} 

}

+0

質問を投稿する前に、疑似質問をしてください。ここを見てください[link](http://stackoverflow.com/questions/28877835/android-google-maps-v2-current-position-latitude-longitude-nullpointerexception)。もっと似たようなソリューションが見つかるはずです。 –

+0

**あなたのクラスに**輸入**が何であるかを表示することもできますか?または、実際のデバイスで[設定]から[場所]が有効になっていることを確認してください。 –

+0

私のモバイルデバイスの場所にある@jaydroiderが有効になっていて、どこにインポートが表示されるのか質問を編集しました – user3923278

答えて

0

あなたmGoogleApiClient.connect()を呼び出すために忘れてしまいました。

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

    private GoogleMap mMap; 
    AppLocationService appLocationService; 
    GoogleApiClient mGoogleApiClient; 
    private Location mLastLocation; 

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

mGoogleApiClient.connect(); 

} 

private void setUpMapIfNeeded() { 
    if (mMap == null) { 
     mMap = ((SupportMapFragment) 
     getSupportFragmentManager().findFragmentById(R.id.map)) 
       .getMap(); 
     if (mMap != null) { 
      displayLocation(); 
     } 
    } 
} 

private void displayLocation() { 

    mLastLocation = LocationServices.FusedLocationApi 
      .getLastLocation(mGoogleApiClient); 

    if (mLastLocation != null) { 
     double latitude = mLastLocation.getLatitude(); 
     double longitude = mLastLocation.getLongitude(); 

     Log.d("result", latitude + ", " + longitude); 

    } else { 

     Log.d("result3","(Couldn't get the location. Make sure location is 
     enabled on the device)"); 
    } 
} 

@Override 
public void onConnected(Bundle bundle) { 
      mLastLocation = LocationServices.FusedLocationApi 
      .getLastLocation(mGoogleApiClient); 
    setUpMapIfNeeded(); 
} 

@Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onLocationChanged(Location location) { 

} 

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 

} 
} 

あなたのコードを編集しました。これが機能するかどうかを確認します。

+0

** D/result3:場所を取得できませんでした。ロケーションがデバイスで有効になっていることを確認してください**これは私のログカットに入れたいです – user3923278

+0

GoogleApiClientが接続されているかどうかを確認し、モバイル設定のロケーション設定が有効になっているかどうかを確認してください –

+0

自分の位置が有効です。 GoogleApiClientが接続されているかどうかを確認する方法は? – user3923278

0

があり、あなたのコード

あなたはGoogleApiclientに接続されていない中2つのミスしているので、あなたは、ビルダーを使用して、それを構築した直後mgoogleApiclient.connectを呼び出します。

onConnected()コールバックメソッドでdisplayLocation()メソッドを呼び出します。これは成功コールバックのGoogleApiClientです。つまり、クライアントに接続して現在地を取得できます。

また、あなたは、あなたのアプリにMapsまたはPlaces APIを使用していないまで、あらゆるGoogleApikeyを登録せずに場所を得ることができます。

+0

あなたの答えといくつかの他のチュートリアルの後、私は自分のコードを変更しましたが、まだ私は私の緯度を取得していないと私の携帯電話の場所も有効になり、私の編集したポストで新しいコードを見ることができます**更新コード** – user3923278

+0

現在の緯度と経度を取得する他の方法を教えてください – user3923278

+0

コードをデバッグしようとすると、GoogleApiClientが接続されていますか? –

関連する問題