I try to play a sound from R.raw. inside a Thread/Runnable
But I can't get this to work.
new Runnable(){
public void run() {
//this is giving me a NullPointerException, because getBaseContext is null
MediaPlayer mp = MediaPlayer.create( getBaseContext(), R.raw.soundfile);
while (true) {
if (something)
play something
}
}
How can I get the real Context inside the run method? It is null no matter what I try. Or is there a better way to do this?
You should also be able to get the this reference from the outer class by using MainActivity.this
.
You should use getBaseContext. Instead, if this runnable is within an activity, you should store the context in a class variable like this:
public class MainActivity extends Activity {
private Context context;
public void onCreate( Bundle icicle ) {
context = this;
// More Code
}
// More code
new Runnable(){
public void run() {
MediaPlayer mp = MediaPlayer.create(context, R.raw.soundfile);
while (true) {
if (something)
play something
}
}
}
}
Also you shouldn't have an infinite loop like that playing a sound over and over - there should be a sleep in there in order to prevent the sound from playing over and over in a small amount of time and overlapping the same sounds with each other.
I guess you need to create a Thread and call Thread.start().
You need to declare a Handler object in your UI thread.
Then in your Thread use
YourHandler.post(new Runnable() {
public void run() {
//do something to the UI (i.e. play something)
}});