緯度と経度を取得するにはAndroidのネイティブな方法

両方のターゲティング方法:GPS測位、無線LAN測位
長所と短所:

  このプロジェクトは、より高い位置を必要とするか、または三者ギャラリーの使用をお勧めしている場合

WifiのGPS測位より正確な位置決めと比較すると、ネットワーク条件が存在しない状態で使用することができますが、基本的に突然死亡した室内で使用することができない
制限が適用されないが、GPSネットワークを開く必要はありません屋内測位をWIFI、追加のテストをする際のWiFiポジショニング(とonLocationChanged機能を見つけました間隔が30秒未満であることができない)緯度と経度の変化を監視するようにトリガ
   次のコードは、Wi-Fiが配置されています

パブリッククラスGPSActivityはAppCompatActivityを拡張{
パブリック静的最終int型LOCATION_CODE = 301。
プライベートLocationManager locationManager。
プライベート文字列locationProvider = NULL;

@Override
ボイドのonCreate(バンドルsavedInstanceState){保護
super.onCreate(savedInstanceState)。
getLocation();
}

プライベートボイドのgetLocation(){
locationManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE)。
//获取所有可用的位置提供器
一覧<文字列>プロバイダ=のlocationManager.getProviders(真の);
(providers.contains(LocationManager.NETWORK_PROVIDER))であれば{
//如果是ネットワーク
locationProvider = LocationManager.NETWORK_PROVIDER。
}
IF(Build.VERSION.SDK_INT> = Build.VERSION_CODES.M){
//許可を得る(オープン許可されていない場合、あなたが開く権限を持っている場合、ダイアログボックスが尋ねるポップアップ表示されます)
(ContextCompat.checkSelfPermission(これ、Manifest.permission.ACCESS_FINE_LOCATION)IF != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(これ、Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED){
//要求許可
ActivityCompat.requestPermissions(この、新しい新しいString [] {Manifest.permission.ACCESS_FINE_LOCATION、
Manifest.permission } .ACCESS_COARSE_LOCATION、LOCATION_CODE);
}他{
//変更監視位置
locationManager.requestLocationUpdates(LocationProvider、3000 ,. 1、LocationListener);
場所所在地= locationManager.getLastKnownLocation(LocationProvider)。
IF(!= NULL LOCATION){
//は入力座標
Toast.makeText(この、location.getLongitude()+ "" + location.getLatitude()+ ""、Toast.LENGTH_SHORT).SHOW();
}
}
{}他の
//位置監視変更
locationManager.requestLocationUpdates(LocationProvider、3000 ,. 1、LocationListener)を、
位置ロケーション= locationManager.getLastKnownLocation(LocationProvider);
IF(!LOCATION = NULL){
//が空でない、表示地理的な緯度と経度
Toast.makeText (この、location.getLongitude()+ "" + location.getLatitude()+ ""、Toast.LENGTH_SHORT).SHOW();
}
}
}

パブリック新しい新しい= LocationListener LocationListener LocationListener(){
//プロバイダ利用可能状態、この機能は一時的に利用できないトリガーと切り替えなしの直接サービス3の状態である
@Overrideを
ボイドonStatusChangedパブリック(文字列プロバイダ、INT状態、バンドルエクストラ){
}
GPSなどのプロバイダが有効である場合//この関数がトリガーされたが、開放され
@Override
onProviderEnabled公共ボイド(文字列プロバイダ){
}
、プロバイダが無効である場合//この関数がトリガーされましたGPSが閉じられるような
@Override
公共ボイドonProviderDisabled(文字列プロバイダ){
}
//この関数は変更座標トリガするときに、同じ座標プロバイダに渡された場合、それがトリガされない
@Override
{OnLocationChanged公共ボイド(ロケーションLOCATION)を
IF (LOCATION!= NULL){
//空でない場合、ディスプレイ地理緯度と経度
Toast.makeText(GPSActivity.this、location.getLongitude()+ "" + location.getLatitude()+ ""、Toast.LENGTH_SHORT).SHOW( );
}
}
};

@Override
公共ボイドonRequestPermissionsResult(INT requestCode、@NonNullのString []権限、@NonNull INT [] grantResults){
スイッチ(requestCode){
ケースLOCATION_CODE:
(grantResults.length>もし0 && grantResults [0] == getPackageManager()PERMISSION_GRANTED。
&& grantResults [1] == PackageManager.PERMISSION_GRANTED){
Toast.makeText(この"申请权限"、Toast.LENGTH_LONG).SHOW();
{試す
一覧<文字列>プロバイダ=のlocationManager.getProviders(真の);
(providers.contains(LocationManager.NETWORK_PROVIDER))であれば{
//如果是ネットワーク
locationProvider = LocationManager.NETWORK_PROVIDER。
}他(providers.contains(LocationManager.GPS_PROVIDER))であれば{
//如果是GPS
locationProvider = LocationManager。
}
//位置監視が変化
locationManager.requestLocationUpdatesを(LocationProvider、3000 ,. 1、LocationListener);
ロケーションLOCATION = locationManager.getLastKnownLocation(LocationProvider);
IF(!LOCATION = NULL){
//空でない場合、ディスプレイ地理緯度と経度の
トースト。 MAKETEXT(GPSActivity.this、location.getLongitude()+ "" + location.getLatitude()+ ""、Toast.LENGTH_SHORT).SHOW();
}
}キャッチ(SecurityExceptionがE){
e.printStackTrace();
}
}そう{
Toast.makeText(この、 "権威の欠如"、Toast.LENGTH_LONG).SHOW();
フィニッシュ();
}
ブレーク;
}
}

@Overrideは
ボイドonDestroy(){保護
super.onDestroyを();
locationManager.removeUpdates(LocationListener);
}
}
のAndroidManifest.xmlで権利を追加することを忘れないでください。

<使用許可アンドロイド:名=「QRアプリケーション」/>
<使用許可アンドロイド:名=「android.permission.ACCESS_COARSE_LOCATION」/>
<使用許可アンドロイド:名=「android.permission.INTERNETあなた」/ >
定位只需更换下面GPS代码

IF(providers.contains(LocationManager.GPS_PROVIDER)){
//如果是GPS
locationProvider = LocationManager.GPS_PROVIDER。
}そうであれば(providers.contains(LocationManager.NETWORK_PROVIDER)){
//如果是ネットワーク
locationProvider = LocationManager.NETWORK_PROVIDER。
}他{
意図I =新しいテント()。
i.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS)。
startActivity(I);
}

おすすめ

転載: www.cnblogs.com/ly570/p/10971081.html