android - GPS状态改变时如何接收系统广播?

标签 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>

最佳答案

我相信您只是指向 list 中的错误位置,更改接收者的姓名:

<receiver android:name=".GPStStatusReceiver">

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

来自评论的补充

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

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

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

关于android - GPS状态改变时如何接收系统广播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11398732/

相关文章:

android 在外部浏览器中打开链接

android - 图表引擎 - 如何将饼图图例显示到中心

android - 如何使用android查找最后位置

iphone - iPhone 网络应用程序可以获取 GPS 位置吗?

ios - 获取 iPhone 相机胶卷中视频的 GPS 坐标

android - 错误 : Activity not started, 无法解析 Intent { act=android.intent.action.CALL }

java - 我应该提供一个 Activity 子类供我的 Activity 使用吗?

android - 使用 Realm for android 将 RealmList<Object> 设置为我的数据库项

android - 当我退出程序时以编程方式关闭 GPS

objective-c - 未调用 CoreLocation 区域代表