Skocz do zawartości
Ebugogo

Programowe wyzwolenie zdarzenia

    Rekomendowane odpowiedzi

    Witam. W moim urządzeniu na bluetooth występuje fizyczny przycisk który po naciśnięciu zmienia stan z 0 na 1. Stan 1 nie trwa tylko kiedy przycisk jest naciśniety lecz trwa przez określony czas i potem wraca do zera.  String stanu przycisku jest odbierany w aplikacji i ma zostać wykorzystany do wyzwolenia zdarzenia takiego jak beep czy zapisywanie danych na sd. Natomiast mam problem z ta pozornie prostą rzeczą mianowicie przy warunku if string="1", zdarzenie jest wykonywane wielokrotnie a nie jeden raz np:

         if((newString[4].equals("1"))){
    
    
                                        display_event.setText("*"); //event
    
    
    
                                           ToneGenerator toneGen1 = new ToneGenerator(AudioManager.STREAM_MUSIC, 100);
    
                                           toneGen1.startTone(ToneGenerator.TONE_CDMA_CALLDROP_LITE, 500); // 500ms
    
         }

     

    Potrzebuje żeby to działało tak jak zwykły przycisk, czyli tylko jeden raz a nie w kółko. Kod który wkleiłem powoduje wielokrotne bzyczenie a nie tylko raz.  Pozdrawiam

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Sposób rozwiązania problemu jest bardzo prosty, potrzebny Ci jeden warunek więcej musisz sprawdzać czy dostajesz 1 i czy już ją zapisałeś (zapisujesz gdy dostajesz pierwszy raz) a później to zerujesz czyli jedna zmienna która wchodzi w if z stanem 0, a wychodzi z stanem 1

    Wysłane z mojego FRD-L09 przy użyciu Tapatalka

    • Piwko! 1

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Dzięki wiem o czym mówisz ale jaki warunek i jaka zmienna:) pozdrawiam

    dodana zawartość

        
     public static int sprawdz=1;
    
    
                                         if((newString[4].equals("1"))) {
    
                                           sprawdz = 0;
    
    
                                           display_event.setText("*"); //event
    
    
                                           ToneGenerator toneGen1 = new ToneGenerator(AudioManager.STREAM_MUSIC, 100);
    
                                           toneGen1.startTone(ToneGenerator.TONE_CDMA_CALLDROP_LITE, 500); // 500ms
    
    
                                           if(sprawdz)
    
    
    
                                           sprawdz=0;
    
                                       }
    
                                       else
    
                                       {
    
                                           sprawdz=1;
    
                                           
    
                                       }

     

    Nie kompiluje się:

    error: ncompatible types: int cannot be converted to boolean

     

     

     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Taran20

     

     if(sprawdz)

    Tutaj masz boolean. Sprawdzasz czy jest true albo false. 

    • Piwko! 1

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
       boolean sprawdz=true;                 
    
    
    
    
                                       if((newString[4].equals("1"))) {
    
                                        sprawdz = false;
    
    
                                        display_event.setText("*"); //event
    
    
                                        ToneGenerator toneGen1 = new ToneGenerator(AudioManager.STREAM_MUSIC, 100);
    
                                        toneGen1.startTone(ToneGenerator.TONE_CDMA_CALLDROP_LITE, 500); // 500ms
    
    
                                        if(sprawdz)
    
    
    
                                            sprawdz=false;
    
                                    }
    
                                    else
    
                                    {
    
                                        sprawdz=true;
    
    
    
                                    }

     

     

    Niestety to samo, wielokrotny beep zamiast 1 raz. Ktoś pomoże?

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Taran20

    dodaj 

    finish();

    przed końcem warunku. 

    • Piwko! 1

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Nie działa, gdzie nie wstawie

    finish();

     

    to zamyka aplikację

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Stop, stop co tu się dzieje Panowie...w złym miejscu masz ten warunek, on powinien być nadrzędny - twój beep ma być w środku if-a

    Wysłane z mojego FRD-L09 przy użyciu Tapatalka

    dodana zawartość

    Tak powinno to wyglądać:

    If (sprawdz) {
    sprawdz = false;
    //reszta Twojego kodu
    } else {
    sprawdz = true;
    }

    Tak sobie jeszcze myślę, że powinieneś liczyć czas nacisku i blokować przycisk na chwilę

    Wysłane z mojego FRD-L09 przy użyciu Tapatalka

    • Piwko! 1

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
                if((newString[4].equals("1"))) {
    
    
    
    
                                        if(sprawdz)
    
    
                                            display_event.setText("*"); //event
    
    
                                        ToneGenerator toneGen1 = new ToneGenerator(AudioManager.STREAM_MUSIC, 100);
    
                                        toneGen1.startTone(ToneGenerator.TONE_CDMA_CALLDROP_LITE, 500); // 500ms
    
    
    
                                            sprawdz=false;
    
                                    }
    
                                    else
    
                                    {
    
    
    
    
                                        sprawdz=true;
    
    
    
                                    }

     

    Coders Lab, o to Ci chodzilo? W każdym razie dalej nie działa.

    newString[4] przyjmuje na początku "0" , po zmianie na "1" ma być jeden beep

     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Ten kod nie przypomina tego co napisałem, przyjrzyj się uważniej

    Wysłane z mojego FRD-L09 przy użyciu Tapatalka

    • Piwko! 1

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x