0

次のコードを試しましたが、現在の場所を取得できません。
エミュレータ制御で手動で場所を設定すると、そのような場所は取得されますが、現在の場所は取得されません.nullの場所が取得されます。

  • 現在地を取得するには?
  • 現在地を取得する他の方法はありますか?

これは私のコードです:

package com.p;
import android.app.Activity;
import android.os.Bundle;

import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;

import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
    public class GooglemapActivity extends Activity implements LocationListener {
   private TextView latituteField;
   private TextView longitudeField;
    private LocationManager locationManager;
    private String provider;
        EditText t;
   @Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        setContentView(R.layout.main);



        latituteField = (TextView) findViewById(R.id.TextView02);
        longitudeField = (TextView) findViewById(R.id.TextView04);

        // Get the location manager
     locationManager =                  (LocationManager)getSystemService(Context.LOCATION_SERVICE);



    // Define the criteria how to select the locatioin provider -> use
    // default

            Criteria criteria = new Criteria();
           criteria.setAccuracy(Criteria.ACCURACY_FINE);
           criteria.setAltitudeRequired(false);//true if required
           criteria.setBearingRequired(false);//true if required
           criteria.setCostAllowed(true);
            criteria.setPowerRequirement(Criteria.POWER_LOW);
            provider = locationManager.getBestProvider(criteria, true);
            //provider=LocationManager.GPS_PROVIDER;
        Location location = locationManager.getLastKnownLocation(provider);
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
             /*check provder*/boolean statusOfGPS    =locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);


            if ( statusOfGPS==true) {
        // Initialize the location fields
        if (location != null) {
               System.out.println("Provider " + provider + " has been      selected.");
                   double lat = (double) (location.getLatitude());
                    double lng = (double) (location.getLongitude());
                   latituteField.setText(Double.toString(lat));
                    longitudeField.setText(Double.toString(lng));
                } else {
                      latituteField.setText("Provider is not available");
                      longitudeField.setText("Provider not available");
                }


        }
        else
        {

        latituteField.setText("eeeeeeeee");
        longitudeField.setText("rrrrrrrrr");

        }
    }

    /* Request updates at startup */
    @Override
    protected void onResume() {
        super.onResume();
    locationManager.requestLocationUpdates(provider, 400, 1, this);
    }

    /* Remove the locationlistener updates when Activity is paused */
    @Override
    protected void onPause() {
        super.onPause();
    locationManager.removeUpdates(this);
    }

    public void onLocationChanged(Location location) {
            double lat = (double) (location.getLatitude());
         double lng = (double) (location.getLongitude());
        latituteField.setText(Double.toString(lat));
        longitudeField.setText(Double.toString(lng));
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

    public void onProviderEnabled(String provider) {
        Toast.makeText(this, "Enabled new provider " + provider,
            Toast.LENGTH_SHORT).show();

    }

    public void onProviderDisabled(String provider) {
        Toast.makeText(this, "Disabled provider " + provider,
            Toast.LENGTH_SHORT).show();
    }
     }

以下のように、manifest.xml に権限を追加しました。

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

2 に答える 2

0

エミュレータで現在の場所を取得することはできません。それらはDDMSを介して設定でき、エミュレーターの場合は現在の場所になります。

于 2012-05-04T06:15:55.750 に答える
0

どうか、最後に知られた場所を取得しようとしないでください。ほとんどの場合、それは古くて役に立たないものです。代わりにlocationListenerを設定し、場所が更新されるのを待ちます。これにより、現在地がわかります。

このコードを使用して、GPS更新の一覧表示を開始し、受信したデータを使用して何かを行うことができます。また、デバッグを容易にするために、ログファイルにメッセージを出力します。この関数は結果を返さず、GPSのリッスンを開始するだけであることに注意してください。結果は、後で// do something here with the new location dataどこかに保存できるときに提供されます。

private void getGpsData() {
    locationManager = (LocationManager) owner.getSystemService(Context.LOCATION_SERVICE);

    locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            Log.i(TAG, "location change:" + location.toString());

            String longitude = "Londitude: " + location.getLongitude();
            String latitude = "Latitude: " + location.getLatitude();

            if( location.hasAccuracy() ) {  // good enough?
                // do something here with the new location data
                ....
                //
                Log.i(TAG, "GPS listener done");
                locationManager.removeUpdates(this);    // don't forget this to save battery
            }
        }

        public void onStatusChanged(String provider, int status, Bundle extras) {
            Log.i(TAG, provider + " status:" + status);
        }

        public void onProviderEnabled(String provider) {
            Log.i(TAG, provider + " enabled");
        }

        public void onProviderDisabled(String provider) {
            Log.i(TAG, provider + " disabled");
        }
    };
    Log.i(TAG,"GPS listener started");
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener );
}
于 2012-05-04T10:24:57.083 に答える