我在下面写了代码,但它没有用。有谁能够帮我? 我只是想被动地接收位置更改。我想在后台运行我的应用程序,只要它获得位置更改的系统广播,但这里使用此代码不显示日志。
这是我的清单
<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();
}
}
答案 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);
每当设备找到新的更新位置时,它都会给您一个回调(因为您注册了服务以接收位置更新)。在位置更改,提供程序更改和状态更改后,将调用您的侦听器接口实现的回调方法。