我正在测试一台广播接收器并在我的日志中打印GPS的状态,以便了解它是否按预期工作,我发现了一些奇怪的行为(也许它并不奇怪,但是我没想到它。)
每当一个人切换GPS时,如果这是偶尔的第一次,它会花一些时间让BroadcastReceiver接收事件,当它发生时,它会多次触发(大约10次)。在那之后,当一个人打开和关闭它时,每次都会被触发两次。
为什么会这样?
这就是我在我的清单中所拥有的:
<receiver android:name=".receivers.GpsLocationReceiver" >
<intent-filter>
<action android:name="android.location.PROVIDERS_CHANGED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
答案 0 :(得分:0)
您可以使用共享首选项和线程来避免此问题 但这不是克服这个问题的正确方法
我的方法如下
@Override
public void onReceive(Context context, Intent intent) {
boolean flage=MainActivity.getpreference();
if(!flage){
MainActivity.putPreferens(true);
Log.e("gpssss","gpssss");
Thread thread = new Thread() {
@Override
public void run() {
try {
sleep(2000);
MainActivity.putPreferens(false);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
}}
}
到主类我创建一个共享首选项并存储布尔值false 广泛的演员