对user_present调用BroadcastReceiver.onReceive两次

时间:2011-11-24 03:32:33

标签: android

我有一个奇怪的(?)问题,我为BroadcastReceiver实施了USER_PRESENT,它在我的平板电脑上工作正常,但在我的Galaxy S上,它会被触发两次,有些可以解决一些问题这里吗?

<receiver android:name="XYZBroadcastReceiver" >
   <intent-filter>                              
     <action android:name="android.intent.action.USER_PRESENT"/>                
  </intent-filter>              
</receiver>

我在onReceive方法中有一个简单的声明,并且它打印了两次,在logcat中我也看到了以下两次:

11-23 17:36:35.603: INFO/Launcher(2632): ACTION_USER_PRESENT

3 个答案:

答案 0 :(得分:0)

可能是您已经在设备中安装了两次应用程序(广播接收器存在于不同的应用程序中)。

请验证并卸载所有测试应用程序。然后进行测试,看看是否在日志中打印了日志语句。然后安装您的应用程序,看看会发生什么。

希望这可以帮到你。

答案 1 :(得分:0)

好的,在没有及时回应的情况下,我不得不前进,我想出了解决方法。 解决方法是检查数据库并确保两个事件之间存在时间差,至少> = 1

这样一旦快速调用(目前仅在Galaxy上发生),第二次快速调用就不会采取任何措施。

答案 2 :(得分:0)

我做了这个解决方案。我创建了一个简单的信号量。 创建一个公共类

public class Global {

public static  Boolean IS_RUNNING= false;
}

并在BroadcastReceiver中

public class ConnectivityReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {


    if (Global.IS_RUNNING){
        //allready running!!! do nothing
        return;
    }
    Global.sendToLog("run the update");

    ... do stuff, in the end set Global.IS_RUNNING=false;

}

}

相关问题