2

我写了下面的代码,但它不起作用。有谁能够帮我?我只想被动地接收位置更改。我想在收到位置更改的系统广播时在后台运行我的应用程序,但是这里的代码不显示日志。

这是我的清单

<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<receiver android:name=".LocationReceiver"
              android:enabled="true" >           
   <intent-filter>
        action android:name="android.location.PROVIDERS_CHANGED"               
        </intent-filter>
 </receiver>

没有得到日志

     public class LocationReceiver extends BroadcastReceiver {
     public static final String PROVIDERS_CHANGED_ACTION="android.location.PROVIDERS_CHANGED";  

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    if (intent.getAction().equals(PROVIDERS_CHANGED_ACTION)) {
        Log.d("---------log--------", "Location Changed");
        myAction();

    }
}
4

1 回答 1

2

要获取位置更新,首先实现位置侦听器接口。

public class LocationListeners implements LocationListener {

@Override
public void onLocationChanged(Location loc) {
    // TODO Auto-generated method stub
    Log.e("______", "location: " + loc.getTime() + " provider:" + loc.getProvider());
}

@Override
public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub
    Log.e("_______", "disabled: " + provider);
}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub
    Log.e("_______", "enable: " + provider);
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub
    Log.e("________", "privider: " + provider + " status changed:" 
            + String.valueOf(status) + " extras: " 
            + extras.getInt("satellites"));

}

}

注册以使用所需的提供程序从位置管理器接收位置更新。在你的情况下被动提供者。

locListener = new LocationListeners();
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, locListener);

每当设备找到新的更新位置时,它都会给您一个回调(因为您注册了该服务以接收位置更新)。在位置更改、提供者更改和状态更改时,将调用您的侦听器接口实现中的回调方法。

于 2013-07-25T20:53:50.680 回答