位置发生变化后如何收到系统广播?

时间:2013-07-25 07:53:00

标签: android

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

这是我的清单

<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();

    }
}

1 个答案:

答案 0 :(得分: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);

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