Button mit "Dauersound" - Hilfe

A

Android_DEV

Ambitioniertes Mitglied
1
Hallo ich möchte gerne passend zur WM eine Trötenapp/Vuvuzelaapp programmieren.
Es gibt nur ein Problem, es "trötet" nur wenn ich auf den Button klicke und wieder los lasse. Was muss ich im code ändern um den Button solange tröten zu lassen wie der Button gedrückt ist? Ich hab zum Thema dauerschleifensound, Sound Wiederholung usw nichts hilfreiches gefunden.:confused2:

Ich würde mich freuen, wenn mir jemand helfen könnte :thumbsup:




import android.media.MediaPlayer;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class MainActivity extends ActionBarActivity {
public MediaPlayer mp;
Button sound1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sound1 = (Button) findViewById(R.id.sound1);
sound1.setOnClickListener(new View.OnClickListener() {
public void onClick (View v) {
MediaPlayer mp = MediaPlayer.create ( getApplicationContext(),R.raw.sound1);
mp.start();
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
 
Nein, ich habe noch keinen solchen thread gestartet.

Trotzdem, danke.
 
Vielen vielen dank , ich probiers mal mit "public void playSoundEffect (int soundConstant)".

View | Android Developers()


Ich glaube das richtige gefunden zu haben . :)
 
Hatte gerade Langeweile
Und wollte das eh mal ausprobieren (hatte das bisher nur in der Theorie in meinem Kopf laufen ;))
Bei der App wird solange hochgezählt, wie man den Button drückt.
Musst du dir halt so anpassen, dass statt hochgezählt wird während der Zeit der mediaplayer spielt (dazu brauchst du den AsyncTask nicht wenn ich mich nicht vertue).
Und den Mediaplayer dazu bekommen deine SoundDatei in einer Endlosschleife zu spielen.
Code:
package de.amfa.newtestapp;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnTouchListener {

    TextView textView;
    int count = 0;
    AsyncTask<Integer, Integer, Integer> asyncTask;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button1);
        textView = (TextView) findViewById(R.id.textView1);
        button.setOnTouchListener(this);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            asyncTask = new MyAsyncTask();
            asyncTask.execute(count);
           //Hier dein mediaplayer starten
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            asyncTask.cancel(true);
            //Hier den Mediaplayer beenden
        }
        return false;
    }

    private class MyAsyncTask extends AsyncTask<Integer, Integer, Integer> {

        @Override
        protected Integer doInBackground(Integer... params) {
            int x = params[0];
            while (true) {
                x++;
                publishProgress(x);
                if (isCancelled()) {
                    break;
                }
                try {
                    Thread.sleep(250);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            return x;
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            textView.setText(String.valueOf(values[0]));
        }

        @Override
        protected void onCancelled(Integer result) {
            count = result;
        }
    }
}
 
Genial, danke amfa :D
Sehr hilfreicher Tip !
 
Ich habe mal den mediaplayer startaufruf eingefügt, aber es werden laufend Fehlermeldungen angezeigt.
Ich habe es unter asyncTask.execute(count); eingefügt.
Habe ich etwas außer Acht gelassen ?



hier der startaufruf --->troete = (Button) findViewById(R.id.troete);
troete.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.troete);
mp.start();
//Hier dein mediaplayer starten
}
 
Den AsyncTask kannst du wie gesagt rausmachen.
Den Mediaplayer hattest du bei dir ja schon drin.

eigentlich musst du nur asynctask.execute() durch mp.start() und asynctask.cancel() durch mp.stop() austauschen.

zumindest in der theorie.
 
Alles klar, danke ;)
 

Ähnliche Themen

MES
Antworten
10
Aufrufe
831
MES
MES
A
  • AnimaAngelo85
Antworten
1
Aufrufe
344
swa00
swa00
D
Antworten
17
Aufrufe
429
datNeMo
D
Zurück
Oben Unten