android - 位置发生变化时如何接收系统广播?

标签 android

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

这是我的 list

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

    }
}

最佳答案

要获取位置更新,请首先实现位置监听器接口(interface)。

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

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

关于android - 位置发生变化时如何接收系统广播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17852136/

相关文章:

android - 如何在 react-native 中获取上下文

android - 膨胀类 android.widget.CheckBox 时出错

Android:有没有办法检测来自 SoundPool 的声音是否仍在播放

android - 位图转换为 webp 给出信号 11

java - 如何在 AlertDialog 之后显示 ProgressDialog

javascript - 每次 Android 打开自己的虚拟键盘时,jQMobile 都会重新定位弹出窗口 - 我无法输入任何内容

Java程序二维地形低多边形风格

android - android 中的 Webview 仅在 Samsung galaxy tab 2 中挂起

android - Android中的MultiLine EditText,光标从顶部开始

android - 更改 Fragment 中的 TextView