2016-08-03 8 views
5

Tworzę aplikację językową do celów edukacyjnych i do ćwiczenia w Androidzie Chcę zapisać wszystkie lekcje audio w tablicy i mam aktywność dla każda lekcja po naciśnięciu na przykład Audio 1 powoduje wyskakiwanie nowej aktywności z odtwarzaczem (AudioPopup.java) , ale problem nie chcę tworzyć wyskakujących okienek do odtwarzania niektórych dźwięków dla każdej lekcji , czego potrzebuję, to rozpoznanie, które przycisk został naciśnięty i otwórz AudioPopup które stworzyłem i grać, że niektóre mp3Jak odtwarzać plik audio po kliknięciu wybranego przycisku z poprzedniej aktywacji

kod AudioPopup

public class AudioPopup extends AppCompatActivity { 

    SeekBar seek_bar; 
    ImageView play_button, pause_button; 
    MediaPlayer player; 
    ImageView exitPlayer; 
    Handler seekHandler = new Handler(); 
    private int [] audioFiles; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.audio_popup); 

     setFinishOnTouchOutside(false); 
     audioFiles = new int [] {R.raw.lesson1-1,R.raw.lesson1-2,R.raw.lesson1-3,R.raw.lesson1-4}; 


     getInit(); 
     seekUpdation(); 

     exitPlayer = (ImageView) findViewById(R.id.audio_exit_1); 
     exitPlayer.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       finish(); 
       player.stop(); 

      } 
     }); 

    } 

    public void getInit() { 
     seek_bar = (SeekBar) findViewById(R.id.seekbar_1); 
     play_button = (ImageView) findViewById(R.id.audio_play_1); 
     pause_button = (ImageView) findViewById(R.id.audio_stop_1); 

     play_button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       PlayAudio(); 

      } 
     }); 
     pause_button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       player.stop(); 
       releaseMediaPlayer(); 
       player = MediaPlayer.create(AudioPopup.this, lesson1-1); 
       play_button.setImageResource(R.drawable.ic_play_circle_filled_black_48dp); 
      } 
     }); 

     player = MediaPlayer.create(this, R.raw.l01_audiotraining_grammatik_01); 
     seek_bar.setMax(player.getDuration()); 
     seek_bar.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       seekChange(v); 
       return false; 
      } 
     }); 


    } 

    Runnable run = new Runnable() { 
     @Override 
     public void run() { 
      seekUpdate(); 

     } 
    }; 

public void seekUpdate() { 


    seek_bar.setProgress(player.getCurrentPosition()); 
    seekHandler.postDelayed(run, 1000); 



} 

//event handler for the progress of seek bar 
private void seekChange(View view) { 
    if (player.isPlaying()) { 
     SeekBar sb = (SeekBar) view; 
     player.seekTo(sb.getProgress()); 

    } 

} 

private void releaseMediaPlayer() { 
    // If the media player is not null, then it may be currently playing a sound. 
    if (player != null) { 
     // Regardless of the current state of the media player, release its resources 
      // because we no longer need it. 
      player.release(); 

      // Set the media player back to null. For our code, we've decided that 
      // setting the media player to null is an easy way to tell that the media player 
      // is not configured to play an audio file at the moment. 
      player = null; 
     } 
    } 

    private void PlayAudio(){ 

     if (player == null) { 
      player = MediaPlayer.create(AudioPopup.this,R.raw.lesson1-1); 
     } 

     if (player.isPlaying()) { 

      player.pause(); 
      play_button.setImageResource(R.drawable.ic_play_circle_filled_black_48dp); 
      try { 
       player.prepare(); 
      } catch (IllegalStateException e) { 

       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     } else { 


      play_button.setImageResource(R.drawable.ic_pause_circle_filled_black_48dp); 
      player.start(); 


     } 
    } 

} 

to tylko odtwarza dźwięk i wstawić go nie rozpoznaje, z którego przycisk w pierwszym aktywność pochodziła z

audio1 = (ImageView) popupView.findViewById(R.id.lesson1_audio_gramar_1); 
assert audio1 != null; 
audio1.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent audio_intent = new Intent(getApplicationContext(), AudioPopup.class); 
     startActivity(audio_intent); 

    } 
}); 

mam wiele przycisków naciskać na każdym dźwiękiem w każdej lekcji, które są one rzeczywiście lekcja 24 :(

+0

Możesz użyć interfejsu i przekazać go podczas uruchamiania działalności, z której chcesz otrzymywać oddzwanianie. –

+0

Możesz użyć interfejsu. Wykonaj działania nadrzędne, aby zaimplementować interfejs i uzyskać wywołanie zwrotne. Przekaż obiekt instancji działania podczas rozpoczynania nowej aktywności. W nowej metodzie interfejsu wywoływania aktywności. –

Odpowiedz

1

co trzeba zrobić, to przekazać wybraną lekcję od pierwszej czynności i obciążenia grać właściwego dźwięku w drugim jednej

można rozpoznać który przycisk (lekcja) do odegrania przez kilka sposobów,

prosty jest numeryczny 1, 2, 3 ... każdy numer reprezentuje lekcję lub możesz przekazać identyfikator zasobu pliku audio i po prostu go odtworzyć w następnym działaniu ta opcja jest lepsza, ponieważ nie musisz używać jeśli instrukcja w następnym działaniu, aby wiedzieć, który indeks lekcji 4 reprezentuje.

więc jedziemy

dla przycisku Audio1 przechodzą res id lekcji 1

audio1.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent audio_intent = new Intent(getApplicationContext(), AudioPopup.class); 
     audio_intent.putExtra("lesson_res_id", R.raw.lesson1-1); 
     startActivity(audio_intent); 

    } 
}); 

i dla przycisku Audio2 przechodzą res id lekcji 2

audio2.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent audio_intent = new Intent(getApplicationContext(), AudioPopup.class); 
     audio_intent.putExtra("lesson_res_id", R.raw.lesson2-2); 
     startActivity(audio_intent); 

    } 
}); 

teraz w sekundę aktywność, uzyskaj przekazaną wartość i odtwórz dźwięk.

int lessonResId = getIntent().getIntExtra("lesson_res_id", -100); //-100 is default, means the key 'lesson_res_id' was not found in extras bundle 
playAudio(lessonResId); 

możesz byłaby kodu (jeśli masz zbyt wiele przycisków) tworząc metodę, która rozpoczyna działalność podręczne i wywołać ją z onClick przechodząc res dźwiękowych id

private void openPopupActivity(int resId){ 
    Intent audio_intent = new Intent(getApplicationContext(), AudioPopup.class); 
    audio_intent.putExtra("lesson_res_id", resId); 
    startActivity(audio_intent); 
} 

i onClick będzie być

audio2.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     openPopupActivity(R.raw.lesson2-2); 
    } 
}); 
+0

człowiek, którego uratowałeś mój dzień, zaimplementowałam twoją pierwszą sugestię i przekazałam ResId w intencji i dostałam się do pakietu AudioPopup i przekazałam go w PlayAudio (int audioResourceId), a następnie zaimplementowałem działanie, aby uruchomić popup, działało dobrze tylko jeden problem mój pasek wyszukiwania nie działa już i jeśli mogę je zmusić do przeniesienia seekto na początek bez żadnego postępu –

+1

Nie martw się, zrobiłem coś głupiego naprawiłem –

+0

Dobrze to słyszeć, właśnie zobaczyłem twoje oba komentarze, więc dobrze jest zobaczyć, że udało ci się posortować to na zewnątrz :) – Yazan

Powiązane problemy