【发布时间】:2015-06-29 18:48:06
【问题描述】:
我已经上网,但我没有找到解决问题的方法。
在我的 android 应用程序中,每次用户关闭 GPS 时,我都必须捕获并向服务器发送通知。这时候我已经写了这段代码
在 Android 清单中:
<receiver android:name="proguide.prosegur.scr.BL.receivers.GPSStatusBroadcastReceiver">
<intent-filter>
<action android:name="android.location.PROVIDERS_CHANGED" />
</intent-filter>
</receiver>
在 GPSStatusBroadcastReceiver 类中:
public class GPSStatusBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
if (arg1.getAction().matches("android.location.PROVIDERS_CHANGED")) {
// here I have to send the notification
}
}
问题是每次用户放下 GPS 时,我都会使用相同的 Context 和 Intent 参数调用此函数两次(我一次只能发送 1 个通知)。
重要提示:它必须在 API 级别 8 下工作。
那么,为什么这会发生两次?我能做些什么(做对了,不要弄乱代码)一次只发送 1 个通知?谢谢,对不起我的英语。
【问题讨论】:
-
如何称呼“onReceive”?你使用循环吗?
-
只需检查
isProviderEnabled方法,看看它是否返回false。请参阅下面的答案。 -
据我了解,将该行放在清单中会使您的应用在每次应用触发“android.location.PROVIDERS_CHANGED”时调用 GPSStatusBroadcastReceiver 类中的 onRecive 方法,因为您是这样设置的。然后,您必须实现 BroadcastReceiver 类的 onRecive 方法。
-
我会通过
Service注册BroadcastReceiver,而不是在AndroidManifest.xml文件中声明BroadcastReceiver操作。请参阅我的更新答案。 -
这是因为您在清单文件和
GPSStatusBroadcastReceiver中定义了两次。所以很自然你会调用两次 GPS 函数。你期望什么行为?