0

我需要获取当前位置,将它们保存到 aBundle并将它们转发到 a BroadCastReceiver,这将每 5 秒触发一次。这就是我构建代码的方式

public class GPSServiceActivity extends Activity {

public Bundle locationBundle;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    locationBundle = new Bundle();
    Calendar cal = Calendar.getInstance();

    getCurrentLocation();

    Intent intent = new Intent(GPSServiceActivity.this, GPSHandler.class);
    intent.putExtra("Latitude", locationBundle.getDouble("Latitude"));
    intent.putExtra("Longitude", locationBundle.getDouble("Longitude"));
    // In reality, you would want to have a static variable for the request
    // code instead of 192837
    PendingIntent sender = PendingIntent.getBroadcast(this, 192837, intent,
            PendingIntent.FLAG_UPDATE_CURRENT);

    // Get the AlarmManager service
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
    am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 5000,
            sender);
}

public void getCurrentLocation() {
    LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    LocationListener mlocListener = new MyLocationListener();
    mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
            5000, 0, mlocListener);

}

/* Class My Location Listener */
public class MyLocationListener implements LocationListener {



    public void onLocationChanged(Location loc) {

        double Latitude = loc.getLatitude();
        double Longitude = loc.getLongitude();

        locationBundle.putDouble("Longitude", Longitude);
        locationBundle.putDouble("Latitude", Latitude);

    }

    public void onProviderDisabled(String arg0) {

    }

    public void onProviderEnabled(String arg0) {

    }

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

    }
}

}

我的Manifest.xml

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

经过一段时间的代码调试,我发现MyLocationListener永远不会触发,Bundle locationBundle它只包含两个值为 0.0 和 0.0 的双精度数。有人可以给我一个关于如何启动和运行的提示吗?

编辑

仅出于测试目的,我编写了此代码

List<String> providers = mlocManager.getAllProviders();

        if(providers.size() > 0) {
            for(int i = 0; i < providers.size(); i++) {
                Log.i("Providers: ", providers.get(i).toString());
            }
        }
        else
            Log.i("Providers: ", "No providers");

这输出

network
gps
passive
4

2 回答 2

0
MyLocationOverlay

它是谷歌地图 API中的方法

于 2012-10-05T09:43:38.127 回答
0

您可以检查是否启用了提供程序。如果没有,请用户启用。检查 updateLocationRequest 调用中的最后一个参数。什么是 mlocListener?它是您的位置侦听器类(MyLocationListener)的对象吗?

于 2012-10-05T09:24:38.037 回答