Aplikacja mająca za zadanie odtwarzać dźwięk przy otrzymaniu sms

0

Proszę o informację co jest w tym programie nie tak. W momencie w którym warunek jest spełniony, program się wywala (wyłącza). Jak to powinno być zrobione, żeby działało?

public class alarm extends BroadcastReceiver {
    mp mpc = new mp();

    @Override
    public void onReceive(Context arg0, Intent arg1) {
        Bundle bundle = arg1.getExtras();
        SmsMessage[] msgs=null;
        String wiadomosc="";
        Object[] pdus =(Object[])bundle.get("pdus");
        msgs=new SmsMessage[pdus.length];
        for(int x=0;x<msgs.length;x++){
            msgs[x]=SmsMessage.createFromPdu((byte[]) pdus[x]);
            wiadomosc=msgs[x].getMessageBody();
            Toast.makeText(arg0, wiadomosc, Toast.LENGTH_LONG).show();
            if (wiadomosc=="test") {
                mpc.setMediaPlayer();
            }
        }
    }
}
public class mp extends AppCompatActivity {
    MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.x);

    public void setMediaPlayer(){
        mediaPlayer.start();
    }

}
2

protip - istnieje coś takiego jak debugger, możesz też użyć try catch i łapać co się wywali.

0
mr_jaro napisał(a):

protip - istnieje coś takiego jak debugger, możesz też użyć try catch i łapać co się wywali.

Założyłem, że dla osoby która zajmuje się tematem, to tylko zerknięcie na kod. Ale dzięki chociaż za to, spróbuje pojechać debugerem.

1

No pierwsze co, to nie tak się tworzy Activity. Klasa mp u Ciebie to jest aktywność, która nie dość, że nie powinna być startowana z Broadcast'a to na dodatek nie robisz tego przez Intent

0
panryz napisał(a):

No pierwsze co, to nie tak się tworzy Activity. Klasa mp u Ciebie to jest aktywność, która nie dość, że nie powinna być startowana z Broadcast'a to na dodatek nie robisz tego przez Intent

Rozwiń proszę. Dlaczego nie powinna być startowana z Broadcastem? To właśnie tam przy tym if'ie, następuje zjawisko które mnie interesuje. Jak to zrobić przez Intent?

0

Wyobraź sobie że każda aplikacja którą posiadasz na telefonie reaguje na jakiś broadcast (systemowy lub nie) i za każdym razem otwiera Ci się jakaś aplikacja.
Żeby zagrać dzwięk po jakiś broadcaście możesz zrobić notyfikację z dźwiękiem którą zaraz potem będziesz cancelować. Możesz też zrobić Service które zagra Ci ten dźwięk.

Intent: https://developer.android.com/reference/android/content/Intent
Service: https://developer.android.com/guide/components/services i tutaj masz też jak wystartować service za pomocą intentu

0

Nie potrzebujesz tam Activity, skoro chcesz tylko odtwarzać dźwięk. Activity (zazwyczaj) służy za punkt wejścia do aplikacji, żeby mieć interakcję z oknem poprzez UI. Po prostu odpal dźwięk ze swojego BroadcastReceivera. I poczytaj jak się zarządza tymi zasobami - https://developer.android.com/guide/topics/media/mediaplayer.

A odnośnie startowania własnego Activity, to nie tworzy się go poprzez konstruktor, bo za jego utworzenie odpowiada framework, czyli Android - https://developer.android.com/training/basics/firstapp/starting-activity.

1 użytkowników online, w tym zalogowanych: 0, gości: 1