2011-11-24 2 views
4

У меня есть странная проблема (?), Я внедрил BroadcastReceiver для USER_PRESENT, он отлично работает на моем планшете, но на моей Галактике S он срабатывает дважды, может кто-то пролить некоторый свет Вот?BroadcastReceiver.onReceive вызывается дважды для user_present

<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

Проблема для моего приложения тоже в Galaxy S. !! Отправьте решение в любом месте, если вы его разрешили. – Kishore

ответ

0

Может быть, вы установили приложение дважды в устройстве (широковещательный приемник существует в буксировке различных приложений).

Проверьте и удалите все тестовое приложение. Затем выполните тест и проверьте, напечатан ли оператор журнала в журнале. Затем установите приложение и посмотрите, что произойдет.

Надеюсь, это может вам помочь.

+0

Спасибо за ответ, но это не сработало для меня. – user1063108

+0

Вы уверены, что строка не отображается, если вы удалите приложение и намерены запустить трансляцию? – Hicham

+0

Ok Вот что я сделал (приложение удалено уже), Удалите приложение, побежал блокировка телефона, то разблокировать, я вижу следующие два 11-23 21: 37: 21,349: INFO/Launcher (2608): ACTION_USER_PRESENT Затем я выключаю телефон, перезагружаюсь, после завершения загрузки я блокирую телефон, а затем разблокирую и снова вижу линию 11-23 21: 37: 21.349: INFO/Launcher (2608): ACTION_USER_PRESENT . Теперь я уверен, что проблема заключается в том, что это событие запускается дважды, поэтому мой широковещательный приемник запускается дважды. Просто имейте в виду, что этого не происходит на моем планшете assus TF101 – user1063108

0

Хорошо, в отсутствие какого-либо ответа вовремя мне пришлось двигаться вперед, и я придумал работу. Работайте над тем, что я проверяю db и убедитесь, что существует разница во времени между двумя событиями не менее> = 1

Этот способ, когда выполняется быстрый вызов (что происходит только сейчас на Galaxy s), никаких действий нет для второго быстрого вызова.

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; 

} 

}

+1

Но сначала вы должны выяснить причину. @Zeev G –

+0

Если бы я знал, почему я не буду использовать этот полу-хакерский раствор. –

Смежные вопросы