我有一个奇怪的(?)问题,我为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
答案 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;
}
}