2011-08-09 8 views
2

gpsやnetwork..iを使用してeditbox内のボタンをクリックして現在の場所を取得しようとしていますが、私はチュートリアルや古い記事で見つかったすべての可能な方法を試しました....しかし、いつもヌルです.. 私はどこに間違っているのですか? 私は.. 現在の場所は常にnullです

この

は私がusing..iが同様に私を助けて..please GPS_PROVIDERと同じ試してみましたよコードです...ネットワークが、ありませんインターネット/ GPRSを持つ実際のデバイス上でそれをテストしてい

 protected void showCurrentLocation() 
    { 
    geocoder = new Geocoder(this); 
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(
       LocationManager.NETWORK_PROVIDER, 
       MINIMUM_TIME_BETWEEN_UPDATES, 
       MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, 
       new MyLocationListener() 
     ); 

    Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
    System.out.println("loc.."+location); 
    if (location != null) 
    { 
    String message = String.format("Location \n Longitude: %1$s \n Latitude: %2$s", 
       location.getLongitude(), location.getLatitude()); 
     Toast.makeText(ShowActivity.this, message, 
       Toast.LENGTH_LONG).show(); 
    //acTextView.setText(message); 
    try { 
      List<Address> addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 10); //<10> 
      for (Address address : addresses) { 
       System.out.println("my location .."+address.getAddressLine(0)); 
      acTextView.setText(address.getAddressLine(0)); 
      } 



     } catch (IOException e) { 
      Log.e("LocateMe", "Could not get Geocoder data", e); 
     } 
    } 
    else 
    { 
    AlertDialog.Builder alertbox1 = new AlertDialog.Builder(this); 
    alertbox1.setMessage("No GPS or network ..Signal please fill the location manually!"); 
    alertbox1.setNeutralButton("Ok", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface arg0, int arg1) 
    {}}); 
    alertbox1.show(); 
    } 

} 

新しい問題を尋ねるのではなく、質問を編集しています。私の問題はまだ同じですが...私はコード内で何も変更していません。しかし、問題は私がGPS_PROVIDERを使用するとき、正確なアドレスを経度と緯度の値とともに返します。しかし、NETWORK_PROVIDERを使うと経度と緯度の値だけが返されます。 NETを使用して完全なアドレスWORK_PROVIDERはGPSが屋内で動作しないためです...どうすればいいですか?

ありがとうございます!

+1

あなたはエミュレータでコードを実行していますか?それからあなたはlastKnownLocatonで常にnullになります...したがって、最初からデフォルト値を試してみるか、Shared Preferenceを使用してください。 – Hanry

+0

no..i「ネットワークを持っているがインターネット/ gprsを持っていない実際のデバイスでそれをテストしています...」 –

+0

Jainalの回答後もまだ問題はありますか? – Hanry

答えて

3

あなたのマニフェストファイルを確認してください。これらの権限を追加したかどうかを確認してください。

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> 

が更新の答えを参照してください:

protected void showCurrentLocation() 
     { 
     geocoder = new Geocoder(this); 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     locationManager.requestLocationUpdates(
        LocationManager.NETWORK_PROVIDER, 
        MINIMUM_TIME_BETWEEN_UPDATES, 
        MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, 
        myLocationListener 
      ); 
     timer = new Timer(); 
     timer.schedule(new GetLastLocation(),20000); 

     } 

    class GetLastLocation extends TimerTask { 

      @Override 
      public void run() { 
       timer.cancel(); 
       locationManager.removeUpdates(locationListener); 
       Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
        System.out.println("loc.."+location); 
        if (location != null) 
        { 
        String message = String.format("Location \n Longitude: %1$s \n Latitude: %2$s", 
           location.getLongitude(), location.getLatitude()); 
         Toast.makeText(ShowActivity.this, message, 
           Toast.LENGTH_LONG).show(); 
        //acTextView.setText(message); 
        try { 
          List<Address> addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 10); //<10> 
          for (Address address : addresses) { 
           System.out.println("my location .."+address.getAddressLine(0)); 
          acTextView.setText(address.getAddressLine(0)); 
          } 



         } catch (IOException e) { 
          Log.e("LocateMe", "Could not get Geocoder data", e); 
         } 
        } 
        else 
        { 
        AlertDialog.Builder alertbox1 = new AlertDialog.Builder(this); 
        alertbox1.setMessage("No GPS or network ..Signal please fill the location manually!"); 
        alertbox1.setNeutralButton("Ok", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface arg0, int arg1) 
        {}}); 
        alertbox1.show(); 
        } 
       } 
       return; 
      } 
     } 

    /** The location listener. */ 
     LocationListener myLocationListener = new LocationListener() { 

      public void onLocationChanged(Location location) { 

      } 
      public void onProviderDisabled(String provider) {} 
      public void onProviderEnabled(String provider) {} 
      public void onStatusChanged(String provider, int status, Bundle extras) {} 
     }; 
+0

すべての必要なアクセス許可を追加しました.. –

0

は、このコードを試してみてください:

public CurrentLocation(Context ctx) { 
    this.context = ctx; 

    locationManager = (LocationManager) context 
      .getSystemService(Context.LOCATION_SERVICE); 
    @SuppressWarnings("unused") 
    List<String> providers = locationManager.getAllProviders(); 

    Criteria locationCritera = new Criteria(); 
    String providerName = locationManager.getBestProvider(locationCritera, 
      true); 

    location = locationManager.getLastKnownLocation(providerName); 
    locationListener = new MyLocationListener(); 

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 
      0, locationListener); 



} 
+1

ありがとうございました。しかし、これは私のケースでは動作しません。このコードはヌルポインタ例外を指定しています... –

1

ネットワークプロバイダがオフになっていた場合だろうヌルバックlocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);から取得するためのもう一つの理由。私の電話では、これは設定 - >場所 - >無線ネットワークを使用して切り替えられます。

EDIT:任意の有効なプロバイダを返すために、ネットワークプロバイダが有効になっているかどうかを確認するために

LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 

をか

LocationManager.getProviders(true) 

また試みることができます。

は、詳細はhttp://developer.android.com/reference/android/location/LocationManager.htmを参照してください

+0

ネットワークプロバイダが有効になっていません... –

+0

@jiya - コードからSystem.out.printlnステートメントを取り出す必要があります。 Androidにはコンソールがありません。 Log.d(...)で置き換えます。また、MINIMUM_TIME_BETWEEN_UPDATESを0に設定し、ロケーション・リスナーにログ・ステートメントを入れて、ネットワーク・プロバイダーが実際に使用可能になっている場合にロケーション更新がトリガーされたときにどうなるかを確認してください。例えば。その可能な場所はあなたの電話で要求されたことがありません。つまり、作成されるまでは常にヌルになります。 –

1

のAndroid 2.3.x以降のSDK(API 9および10)エミュレータはGPSでバグがあります。あなたはあなたのコードを2で試してみるべきです。2(API 8)我々は位置情報の更新をリッスンするNETWORK_PROVIDERを指定するとき

+0

どのバグですか?任意のリンクpls。 –

+0

これは私が参照したリンクの1つです - http://code.google.com/p/android/issues/detail?id=13046 – ryvianstyron

1

Androidのシステムは何のインターネットアクセスがない場合のWi-Fi IDまたはインターネットアクセスポイントの使用は場所

を決定することを可能にします、 no gprs/no wi-fi location updates

:それはこのに読み込ま

を予想通り、それは携帯電話のアンテナ塔から位置を取得doesntの、

があまりにも私と一緒に起こったNULL値を返します。

0

使用このコード

if (android.os.Build.VERSION.SDK_INT > 8) { 

     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 

    } 

そしてまたあなたの設定を確認してください - >所在地とセキュリティ - >無線ネットワークを使用が有効かされていません。

+0

あなたのコードは何をしているのですか? – Geek

関連する問題