2017-08-30 14 views
0

私は最近場所の取得機能を追加しました。私が経度と緯度を表示しようとすると、ゼロを返します。場所を取得するandroid Kotlin

この私LocationListenerクラス:

inner class MylocationListener: LocationListener { 
    constructor():super(){ 
     mylocation= Location("me") 
     mylocation!!.longitude 
     mylocation!!.latitude 
    } 

    override fun onLocationChanged(location: Location?) { 
     mylocation=location 
    } 

    override fun onStatusChanged(p0: String?, p1: Int, p2: Bundle?) {} 

    override fun onProviderEnabled(p0: String?) {} 

    override fun onProviderDisabled(p0: String?) {} 
} 

そして、この私のGetUserLocation機能:

fun GetUserLocation(){ 
    var mylocation= MylocationListener() 
    var locationManager=getSystemService(Context.LOCATION_SERVICE) as LocationManager 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0.1f,mylocation) 
} 

私の経度と緯度を返すために、この私の機能:

fun getLoction (view: View){ 
    prgDialog!!.show(); 

    GetUserLocation() 

    button.setTextColor(getResources().getColor(R.color.green)); 
    textView.text = mylocation!!.latitude.toFloat().toString() 
    Toast.makeText(this, mylocation!!.latitude.toFloat().toString(), Toast.LENGTH_LONG).show() 
    Toast.makeText(this, mylocation!!.longitude.toFloat().toString(), Toast.LENGTH_LONG).show() 

    prgDialog!!.hide() 
} 
+0

ゼロまたはヌルを返しますか? –

+0

場所に必要な権限がアプリケーションに付与されていますか?デバイスやエミュレータでテストしますか?デバイス上でgpsが有効になっていますか? –

答えて

3

GetUserLocation戻ります、locationManagerは範囲外になり、おそらく破壊されていますonLocationChangedを呼び出して更新を提供することができません。

mylocationGetUserLocationの中に定義されているため、範囲外になり、さらに機会がなくなるか、アップデートを受けることになります。

外側のmylocationがどこにどのように宣言されているか(GetUserLocationの外)は表示されていませんが、宣言されている方法はGetUserLocationの内側に隠されています。だからあなたはあまり得意ではありません。

ここでは、どのように行うかの例を示します。変数thetextはレイアウトxml内で定義され、Kotlin拡張でアクセスされます。

// in the android manifest 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
// allow these through Appliation Manager if necessary 

// inside a basic activity 
private var locationManager : LocationManager? = null 

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    setContentView(R.layout.activity_main) 
    setSupportActionBar(toolbar) 

    // Create persistent LocationManager reference 
    locationManager = getSystemService(LOCATION_SERVICE) as LocationManager?; 

    fab.setOnClickListener { view -> 
     try { 
      // Request location updates 
      locationManager?.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0L, 0f, locationListener); 
     } catch(ex: SecurityException) { 
      Log.d("myTag", "Security Exception, no location available"); 
     } 
    } 
} 

//define the listener 
private val locationListener: LocationListener = object : LocationListener { 
    override fun onLocationChanged(location: Location) { 
     thetext.setText("" + location.longitude + ":" + location.latitude); 
    } 
    override fun onStatusChanged(provider: String, status: Int, extras: Bundle) {} 
    override fun onProviderEnabled(provider: String) {} 
    override fun onProviderDisabled(provider: String) {} 
} 
関連する問題