- Forum-Beiträge: 235
06.04.2014, 19:13:43 via Website
06.04.2014 19:13:43 via Website
damals habe ich das Problem hier "berührt"
Und eigentlich habe das Problem wieder. Die isPlaying() Methode der MediaPlayer Klase wirkt eigentlich nicht wirklich ... oder mit dem Programmrumpf (Laufzeit) stimmt was nicht.
Programm:
Drei Buttons starten jemals 1 von 5 Songs im Zufallsmodus.
Alles Funktioniert wie gewollt (wird noch erweitert ... kompakter gemacht ...) außer!:
dass ich mehrere Songs auf einmal mit einem Button abspielen kann. Und genau das möchte ich NICHT!
Ich versuche das Problem in dem Code zu Erläutern.
Das (Core) Hauptproblem befindet sich in der playSound_Lov(hit) Methode.
2import ...;
3
4
5public class Kurak extends Activity {
6
7 // Eifach drei Buttons
8 ImageButton imgButton_Lov;
9 ImageButton imgButton_Precar;
10 ImageButton imgButton_Badmo;
11
12
13 Random random = new Random();
14 int hit = random.nextInt(4)+1;
15
16 // Drei MediaPlayer objekte
17 public MediaPlayer mp_lov, mp_prec, mp_badmo;
18
19 // Jede MP-Obj. bekommt seine Sounds
20 private int[] songs_bad = {R.raw.bad1, R.raw.bad2, R.raw.bad3, R.raw.bad4, R.raw.bad5};
21 private int[] songs_pre = {R.raw.prec1, R.raw.prec2, R.raw.prec3, R.raw.prec4, R.raw.prec5};
22 private int[] songs_lov = {R.raw.lov1, R.raw.lov2, R.raw.lov3, R.raw.lov4, R.raw.lov5};
23
24
25
26 @Override
27 protected void onCreate(Bundle savedInstanceState) {
28 super.onCreate(savedInstanceState);
29 setContentView(R.layout.activity_kurak);
30
31 imgButton_Lov = (ImageButton) findViewById(R.id.imageButton1);
32 imgButton_Precar = (ImageButton) findViewById(R.id.imageButton2);
33 imgButton_Badmo = (ImageButton) findViewById(R.id.imageButton3);
34
35 imgButton_Lov.setOnClickListener(Lov_Listener); // Register the onClick listener with the implementation above
36 imgButton_Precar.setOnClickListener(Precar_Listener);
37 imgButton_Badmo.setOnClickListener(Badmo_Listener);
38
39
40 }
41
42
43 @Override
44 public boolean onCreateOptionsMenu(Menu menu) {
45 // Inflate the menu; this adds items to the action bar if it is present.
46 getMenuInflater().inflate(R.menu.kurak, menu);
47 return true;
48 }
49
50 //OnClickListener des Lov-Button
51 private OnClickListener Lov_Listener = new OnClickListener() {
52 public void onClick(View v) {
53 //Log.d("Lov_Listener ","onClick() Lov-button");
54
55 /*
56 ##### Somit -> alle Mediaplayer Objekte initialisieren und ausführen
57 ##### wirkt auch die isPlaying() Methode
58
59 mp_lov1 = MediaPlayer.create(this, R.raw.lov1);
60 mp_lov2 = MediaPlayer.create(this, R.raw.lov2);
61 mp_lov3 = MediaPlayer.create(this, R.raw.lov3);
62 ...
63 mp_badmo15 = MediaPlayer.create ....15);
64
65 ##### möchte das aber verhindern
66 */
67
68 // einfach die playSound_Lov(hit) Methode mit einem int hit als parameter ausführen
69 playSound_Lov(hit);
70 // bei eventuellem nächstem Klick neu Mischen (neue Zufalszahl generieren)
71 hit = random.nextInt(4)+1;
72 }
73 };
74
75 //OnClickListener des Precar-Button
76 private OnClickListener Precar_Listener = new OnClickListener() {
77 public void onClick(View v) {
78 //Log.d("Precar_Listener ","onClick() Precar-button");
79
80 playSound_Pre(hit);
81 hit = random.nextInt(4)+1;
82 }
83 };
84
85 //OnClickListener des Badmo-Button
86 private OnClickListener Badmo_Listener = new OnClickListener() {
87 public void onClick(View v) {
88 //Log.d("Badmo_Listener ","onClick() Badmo-button");
89
90 playSound_Bad(hit);
91 hit = random.nextInt(4)+1;
92 }
93 };
94
95 protected void playSound_Lov(int index) {
96
97 /*
98 Ein versuch das Problem mit einem Thrad zu lösen.
99
100 new Thread(new Runnable() {
101 int index = 1; // for test only!
102 public void run() {
103 mp_lov = MediaPlayer.create(getApplicationContext(), songs_lov[index]);
104 if(!mp_lov.isPlaying()){
105 mp_lov.start();
106 }
107 }
108 }).start();
109 */
110
111 // MediaPlayer- Objekt mit dem ... Song ... initialisieren und erzeugen / starten.
112 mp_lov = MediaPlayer.create(getApplicationContext(), songs_lov[index]);
113
114 // bei eventuellem nächstem Klick nicht nochmal starten,
115 // bevor das Song nicht zu ende abgespielt wird.
116 if(!mp_lov.isPlaying()){
117 mp_lov.start();
118 }
119 }
120
121 protected void playSound_Pre(int index) {
122
123 mp_prec = MediaPlayer.create(getApplicationContext(), songs_pre[index]);
124 if(!mp_prec.isPlaying()){
125 mp_prec.start();
126 }
127 }
128
129 ...
130 ...
Soll es bedeuten, dass ich alle 15 Mediaplayer Objekte in der Create Methode initialisieren / ausführen soll?
Das wäre ABER! Speicherbelastung PUR!
Oder ist das so "Normal"?
ODER?
Habe ich einen Denkfehler gemacht?
Für einen Denkanstoß wäre ich soeben dankbar!
LG
Georg
— geändert am 06.04.2014, 19:23:00
Sorry für Gramatik & Stilistik Fehler.
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.