2016-07-22 23 views
0

現在の位置座標を経度と緯度で取得しようとしています。ここに私のコードは、これまでのところです:アンドロイドで現在の位置(座標)を取得していますか?

あまりに
public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
    MyLocationListener myLocationListener = new MyLocationListener(); 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     // TODO: Consider calling 
     // ActivityCompat#requestPermissions 
     // here to request the missing permissions, and then overriding 
     // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
     //           int[] grantResults) 
     // to handle the case where the user grants the permission. See the documentation 
     // for ActivityCompat#requestPermissions for more details. 
     return; 
    } 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, myLocationListener); 

} 

}

と、このクラス:

public class MyLocationListener implements LocationListener { 
private static final String TAG = "COORDINATES: "; 

@Override 
public void onLocationChanged(Location location) { 
    if(location != null){ 
     Log.e(TAG, "Latitude: " + location.getLatitude()); 
     Log.e(TAG, "Longitude: " + location.getLongitude()); 
    } 
} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 

} 

@Override 
public void onProviderEnabled(String provider) { 

} 

@Override 
public void onProviderDisabled(String provider) { 

} 

}

私はエミュレータでアプリを実行すると、私はいずれかを得ることはありません座標付きのログメッセージ。助言がありますか?

+0

エミュレータは電話のようには機能しません。彼らはいくつかのツールと設定で地理座標を模倣することができますが、GPSやネットワークを持っていません。[リンクをクリックしてください](http://stackoverflow.com/questions/2279647/how-to-emulate-gps-location-in -the-android-emulator) –

答えて

2

Google Playサービスライブラリで提供されている最新のFusedLocationApiを使用するのが最善の方法です。

古いアプローチを使用する場合は問題ありませんが、非常に正確な結果が得られない場合があります。

どちらの方法でも、アンドロイドマニフェストでインターネット権限(COARSE_LOCATIONまたはFINE_LOCATIONのいずれか)が有効になっていることを確認してください。

また、Android 6.0をお持ちの場合は、実行時のアクセス権を要求する必要があります。そうしないと、動作しません。

私は昨日同様の質問に答え、あなたは-which作品hereを見つけることができます。

また、FusedLocationApi hereのサンプルコードへのリンクもあります。

私はこれがあなたと幸運に役立つことを願っています!

compile 'com.google.android.gms:play-services:9.2.' 

しかし、あなたは場所のような、一つのサービスのみに関心があるならば、あなたは具体的にすることができます:あなたは、Googleがこのようなあなたのbuild.gradleにサービスを再生する追加することができます

UPDATE

compile 'com.google.android.gms:play-services-location:9.2.1' 

NOTE

、それは長期的にユーザーエクスペリエンスを破壊するので、私は非常にあなたのUIスレッド上でユーザーの位置を得ることからあなたを落胆う!別のスレッドを使用してください!

+0

あなたの答えをありがとう、私はすぐに質問があります。 Google Playサービスといえば、Googleデベロッパーコンソールの「Google Playゲームサービス」ですか?(これは申し訳ありません) –

+0

'FuesdLocationApi'は' coarse_location'の正確な位置とネットワークに 'gps'を使います。gpsでは、内部的にgpsを使う' FusedLocation'フラグと同じ場所です。 –

+0

私は回答 – Eenvincible

0

エミュレータでの位置を模倣する必要があります。 Androidデバイスマネージャと[エミュレータコントロールの選択]タブにアクセスし、その場所をエミュレータに送信することで、これを行うことができます。

Location settings in Emulator

関連する問題