2

我写了下面的代码,但它不起作用。有谁能够帮助我?我只想被动接收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>
4

1 回答 1

8

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

<receiver android:name=".GPStStatusReceiver">

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

从评论添加

我只能猜测您没有收到,GPS_ENABLED_CHANGE因为您没有触发位置请求。简单地通过单击位置菜单中的复选框启用 GPS 功能不会广播此意图,某些应用程序必须请求当前位置。另外,我没有找到关于这个 Intent 的任何官方文档,这意味着Android 可能随时更改或删除它

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

<action android:name="android.location.PROVIDERS_CHANGED" />
于 2012-07-09T16:04:54.810 回答