当GPS状态发生变化时,如何接收系统广播?

时间:2012-07-09 15:54:26

标签: android gps

我在下面写了代码,但它没有用。有谁能够帮我?我只想被动地接收GPS状态变化,而不是主动询问。节电是最重要的。

没有消息输出。

package com.sharelbs.lbs.service;  
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class GPStStatusReceiver extends BroadcastReceiver {
  public static final String GPS_ENABLED_CHANGE_ACTION = "android.location.GPS_ENABLED_CHANGE";
  @Override
    public void onReceive(Context context, Intent intent) {
      Log.d("---------log--------","GPS Status onReceive");
      if(intent.getAction().equals(GPS_ENABLED_CHANGE_ACTION)){
        Log.d("---------log--------","GPS Status Changed");
        startMyProgram();
      }
    }
}

这是我的Manifest.xml:

<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=".service.GPStStatusReceiver"> 
  <intent-filter> 
    <action android:name="android.location.GPS_ENABLED_CHANGE" /> 
  </intent-filter> 
</receiver>

1 个答案:

答案 0 :(得分:8)

我相信你只是指向清单中的错误位置,更改接收者的名字:

<receiver android:name=".GPStStatusReceiver">

这种类型的接收器非常适合在启用GPS时启动应用程序,但是当应用程序运行时,即使刷新间隔设置为10天和1000,应用程序运行时,LocationListener的onProviderEnabled()或onProviderDisable()也会捕获这些接收器。里程或更长。因此,如果将大量设置传递给requestLocationUpdates()方法,则不一定会浪费电池电量。

添加评论

我只能猜测您没有收到GPS_ENABLED_CHANGE,因为您没有触发位置请求。只需通过单击“位置”菜单中的复选框启用GPS功能,就不会广播此Intent,某些应用必须请求当前位置。另外,我没有找到关于此Intent的任何官方文档,这意味着Android might change or remove this at any time

也许你想要官方支持的LocationManager.PROVIDERS_CHANGED_ACTION,这将在启用/禁用GPS提供商(和其他提供商)时广播一个意图。

<action android:name="android.location.PROVIDERS_CHANGED" />