android.location.PROVIDERS_CHANGED BroadcastReceiver多次触发

时间:2015-03-08 20:13:32

标签: android gps broadcastreceiver locationmanager

我正在测试一台广播接收器并在我的日志中打印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>

1 个答案:

答案 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 广泛的演员