6

http://developer.android.com/guide/topics/location/obtaining-user-location.htmlで説明されているように、LocationManager と LocationListener を使用して Android の現在の場所を取得しようとしています。

ただし、LocationListener の onLocationChanged メソッドは呼び出されません。上記のリンクで説明されているように、実際の Android フォンを使用したり、エミュレーターを使用したり、telnet を使用してシミュレートされた場所を変更したりしました。

これが私のコードです:

public class MyActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        /* Use the LocationManager class to obtain GPS locations */
        LocationManager mlocManager = (LocationManager) 
                getSystemService(Context.LOCATION_SERVICE);
        LocationListener mlocListener = new CustomLocationListener(
                getApplicationContext());
        // Location Providers
        String locationProvider = LocationManager.NETWORK_PROVIDER;
        // LocationProvider locationProvider = LocationManager.GPS_PROVIDER;
        mlocManager
                .requestLocationUpdates(locationProvider, 0, 0, mlocListener);
    }
}

と私の LocationListener:

public class CustomLocationListener implements LocationListener {

    private Context m_context;

    public CustomLocationListener(Context context) {
        m_context = context;
    }

    @Override
    public void onLocationChanged(Location location) {
        double latitude = location.getLatitude();
        double longitude = location.getLongitude();
        String Text = latitude + " " + longitude;
        Toast.makeText(m_context, Text, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO
    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO
    }

    @Override
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
}

したがって、onLocationChanged が呼び出されることはありません。誰でも問題を見ることができますか?? どうもありがとう

4

4 に答える 4

4

設定するだけでなく、携帯電話に最適なプロバイダーを決定させることもできます

String locationProvider = LocationManager.NETWORK_PROVIDER;

代わりにこれを試してください:

Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);   
String locationProvider = mlocManager.getBestProvider(criteria, true);

また、デバイスを新しい場所に移動してテストしましたか? そうしないと、「onlocationchanged」イベントが発生しない場合があります。数年前にこのことを考えていたとき、ブロックを歩き回ってイベントが発生していることを確認するときに、緯度/経度座標を警告する「トースト」を入れました。

于 2013-05-25T18:37:09.827 に答える
3

This looks like Android Bug 57707 to me.

If it is, rebooting the device should help, at least for a while.

Or you could use the Google Play Services Location API.

By using both Wifi, GPS and Network positioning, the Google Play Services Location API will hide the fact that Network positioning is broken; that will only be obvious when you have neither GPS nor Wifi available.

于 2014-01-22T10:29:27.650 に答える
0

私は同様の問題に直面しました。Try replacing getApplication() with MainAvtivity.this

また、FINE と COARSE の両方の場所のアクセス許可を保持していることを確認してください。ターゲット API が 23 を超える場合は、Java コードからのパーミッションも処理する必要があります。

于 2017-03-07T12:58:32.477 に答える