android.location.PROVIDERS\u已更改的广播接收器多次触发

android.location.PROVIDERS\u已更改的广播接收器多次触发,android,gps,broadcastreceiver,locationmanager,Android,Gps,Broadcastreceiver,Locationmanager,我正在测试一个广播接收器,并在我的日志中打印GPS的状态,以了解它是否按预期工作,我发现了一些奇怪的行为(可能并不奇怪,但我没有预料到) 无论何时切换GPS,如果这是一段时间以来的第一次,广播接收器都需要一段时间才能接收到事件,当它接收到事件时,它会触发多次(大约10次)。在那之后,当一个人打开和关闭它时,它会被触发两次 为什么会这样 这是我在舱单上的信息: <receiver android:name=".receivers.GpsLocationReceiver" > &

我正在测试一个广播接收器,并在我的日志中打印GPS的状态,以了解它是否按预期工作,我发现了一些奇怪的行为(可能并不奇怪,但我没有预料到)

无论何时切换GPS,如果这是一段时间以来的第一次,广播接收器都需要一段时间才能接收到事件,当它接收到事件时,它会触发多次(大约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>

使用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 全体演员