android.location.PROVIDERS\u已更改的广播接收器多次触发
我正在测试一个广播接收器,并在我的日志中打印GPS的状态,以了解它是否按预期工作,我发现了一些奇怪的行为(可能并不奇怪,但我没有预料到) 无论何时切换GPS,如果这是一段时间以来的第一次,广播接收器都需要一段时间才能接收到事件,当它接收到事件时,它会触发多次(大约10次)。在那之后,当一个人打开和关闭它时,它会被触发两次 为什么会这样 这是我在舱单上的信息:android.location.PROVIDERS\u已更改的广播接收器多次触发,android,gps,broadcastreceiver,locationmanager,Android,Gps,Broadcastreceiver,Locationmanager,我正在测试一个广播接收器,并在我的日志中打印GPS的状态,以了解它是否按预期工作,我发现了一些奇怪的行为(可能并不奇怪,但我没有预料到) 无论何时切换GPS,如果这是一段时间以来的第一次,广播接收器都需要一段时间才能接收到事件,当它接收到事件时,它会触发多次(大约10次)。在那之后,当一个人打开和关闭它时,它会被触发两次 为什么会这样 这是我在舱单上的信息: <receiver android:name=".receivers.GpsLocationReceiver" > &
<receiver android:name=".receivers.GpsLocationReceiver" >
<intent-filter>
<action android:name="android.location.PROVIDERS_CHANGED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
使用SharedReference和线程可以避免此问题 但这并不是解决这个问题的正确方法 我的方法如下
@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();
}}
}
对于主类am,创建SharedReference并存储布尔值false
全体演员