2012-01-09 9 views
1
public class LocationtesterActivity extends Activity { 
     /** Called when the activity is first created. */ 
     LocationManager locManager; 
     // LocationListener locListener; 
     Button b; 
     String provider; 
     TextView lat, alt, longi; 


// Here i am first checking if both GPS and network options are enabled in Lovation and Security Settings or not. 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      b = (Button) findViewById(R.id.button1); 
      lat = (TextView) findViewById(R.id.lattitude); 
      alt = (TextView) findViewById(R.id.altitude); 
      longi = (TextView) findViewById(R.id.longitude); 

      b.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        showCurrentLocation(); 

       } 

      }); 

      locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

      Criteria criteria = new Criteria(); 
      criteria.setAccuracy(Criteria.ACCURACY_FINE); 
      criteria.setAltitudeRequired(false); 
      criteria.setBearingRequired(false); 
      criteria.setCostAllowed(true); 

      criteria.setPowerRequirement(Criteria.POWER_LOW); 

      provider = locManager.getBestProvider(criteria, true); 

      System.out.println("best provider is :" + provider); 

      if (!locManager.isProviderEnabled(LocationManager.GPS_PROVIDER) 
        || !locManager 
        .isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 
       System.out.println("in provider enablement"); 
       createGpsDisabledAlert(); 

      } 

      else { 
       System.out.println("in location update request"); 
       locManager.requestLocationUpdates(provider, 0, 0, 
         new MyLocationListener()); 

      } 

     } 

     // for displaying the Dialogue Box 
     // if GPS or network not enabled 
     // and also taking to location and security screen 

     private void createGpsDisabledAlert() { 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setMessage(
      "Your GPS or network provider is disabled! Would you like to enable it?") 
      .setCancelable(false) 
      .setPositiveButton("Enable provider", 
        new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        showGpsOptions(); 
       } 
      }); 
      builder.setNegativeButton("Do nothing", 
        new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
      AlertDialog alert = builder.create(); 
      alert.show(); 
     } 

     private void showGpsOptions() { 
      Intent gpsOptionsIntent = new Intent(
        android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
      startActivityForResult(gpsOptionsIntent, 5); 
     } 

     // //////ends///// 

     // Code to check whether user enabled GPS and Network provider in settings 
     // if not then show the dialogue box again 

     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      if (requestCode == 5 && resultCode == 0) { 
       if (!locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
        createGpsDisabledAlert(); 
        // Toast.makeText(this, 
        // "provider not enabled. Click the button for settings", 
        // 2000).show(); 
       } else { 

        Intent i=new Intent(this, LocationtesterActivity.class); 
        startActivity(i); 
        Toast.makeText(this, "User has enabled the provider", 1000) 
        .show(); 

       } 
      } 
     } 

     // Method to display the current location 
     protected void showCurrentLocation() { 

      Location location = locManager 
      .getLastKnownLocation(LocationManager.GPS_PROVIDER); 

      if (location != null) { 

       String message = String.format(

         "Current Location \n Longitude: %1$s \n Latitude: %2$s", 

         location.getLongitude(), location.getLatitude() 

       ); 

       lat.setText("" + location.getLatitude()); 
       longi.setText("" + location.getLongitude()); 

       Toast.makeText(LocationtesterActivity.this, message, 

         Toast.LENGTH_LONG).show(); 

      } 
      else 
      { 
       Toast.makeText(LocationtesterActivity.this, "no last known location", 1000).show(); 
      } 

     } 

     // Inner class for LocationListener 
     private class MyLocationListener implements LocationListener { 

      public void onLocationChanged(Location location) { 


       System.out.println("in location changed"); 

       String message = String.format(

         "New Location \n Longitude: %1$s \n Latitude: %2$s", 

         location.getLongitude(), location.getLatitude() 

       ); 
       lat.setText("" + location.getLatitude()); 
       longi.setText("" + location.getLongitude()); 
       // alt.setText("" + location.getAltitude()); 
       Toast.makeText(LocationtesterActivity.this, message, 
         Toast.LENGTH_LONG).show(); 

      } 

      public void onStatusChanged(String s, int i, Bundle b) { 

       Toast.makeText(LocationtesterActivity.this, 
         "Provider status changed", 

         Toast.LENGTH_LONG).show(); 

      } 

      public void onProviderDisabled(String s) { 

       Toast.makeText(LocationtesterActivity.this, 

         "Provider disabled by the user. GPS turned off", 

         Toast.LENGTH_LONG).show(); 

      } 

      public void onProviderEnabled(String s) { 

       Toast.makeText(LocationtesterActivity.this, 

         "Provider enabled by the user. GPS turned on", 

         Toast.LENGTH_LONG).show(); 

      } 

     } 

    } 

私は上記のコードを使用してユーザーの場所を探しています。 1.私は自分の判断基準に基づいて常に最高のプロバイダとしてGPSを取得していますが、それは私にとっては大丈夫です。 2.Thingは、なぜ私は場所の値を取得できないのですか? Location location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)であっても。私は何も得ていない。 位置情報を取得するのに手伝ってください。GPSを使用してユーザーの場所を見つけることができません

+0

モバイル(デバイス)のロケーションを確認する場合は、location = locManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)を使用して初期ロードを試し、gpsを使用して更新された値を取得するようにしてください。 – Chet

+0

ネットワークプロバイダでは動作していますが、GPSを搭載しているので10ミントを待っても動作しません。 –

+0

これをlocManager.requestLocationUpdates(provider、0、0、 new MyLocationListener())に変更します。 to ........ locManager.requestLocationUpdates(プロバイダ、8000,2、 新しいMyLocationListener()); ... 8000(更新のための時間[ミリ秒] req ..)と2はメートルを指定します... – Chet

答えて

0

GPSは時間がかかり、建物内にはありません。建物の外で確認してください。
場所location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);一度GPSが以前に場所を取得した場合にのみ動作します。

+1

: - 情報ありがとうございます。しかし、問題は、5分後または10分後にも同じメソッドが呼び出されていますが、私は値を表示できません。 –

+0

http://stackoverflow.com/questions/5124525/current-gps-location-in-androidあなたの解決策を見つけることができます –

-1

2つのこと、

  1. はuがマニフェストファイルに "QRアプリケーション" 権限を設定しています?

  2. Googleマップアプリケーションのすべてのデータを消去し、地図上の現在の位置を取得するためにマップを読み込もうとします。Googleマップが現在の位置を指定すると、アプリケーションは現在の場所を取得できます。

ロケーションを取得するための最良の基準を使用するのがよい習慣です。

デバイスが現在の場所を読み取ることができないことがあります。私もこの問題に直面していますが、その時私はGoogle Maps/Directionアプリケーションをチェックし、GPSをリセットします。

+0

私は権限を追加しました: - –

+0

私は権限を追加しました: - "アンドロイド。 permission.ACCESS_COARSE_LOCATION " "QRアプリケーション" "android.permission.ACCESS_MOCK_LOCATION" "android.permission.INTERNETあなた" "android.permission.CONTROL_LOCATION_UPDATES" "android.permission.ACCESS_WIFI_STATE" " android.permission。 ACCESS_NETWORK_STATE "と私はGoogle Mapsを読み込んでいます。それは私の場所を表示しています。私はそれのためにアンドロイド2.2を使用しています。 AandはAndroid 2.2 APIとGoogle Inc API 2.2の両方でプロジェクトを試しました。私はそれのために別のものが必要ですか? –

+0

Google APIを使用する必要があります。なぜあなたはネットワークプロバイダの助けを借りて場所を取得することができますし、それに問題がある場合は、GPSプロバイダを主張? – rajpara