无法在线程内创建 MediaPlayer
Cannot create MediaPlayer inside thread
我有一个启动线程的服务,我需要在其中创建一个 MediaPlayer:
在onStartCommand
里面我调用了运行线程的main函数
public int onStartCommand(Context context, Intent intent, int flags, int startId) {
Log.e(TAG, "onStartCommand");
doTask(context);
return START_STICKY;
}
void doTask(Context context) {
isActive = true;
thread = new Thread(new Runnable() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void run() {
try {
threadLoop(context);
}
catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
Log.e(TAG, "Thread started");
}
在此之后,我正在 threadLoop
中尝试创建一个 MediaPlayer
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer = MediaPlayer.create(context, AudioData);
但我无法对第一个 context 参数执行任何操作。我尝试发送上下文并获取基础上下文,但它不起作用。
也许我应该为 MediaPlayer 使用其他服务?
提前致谢
更新
错误:
Cannot resolve method 'create(android.content.Context, short[])'
.
您向第二个参数传递了错误的数据。第一个参数没问题。第二个是资源 ID 或 Uri,而不是 short[]。如果短数组应该是音频数据(如原始 .wav 数据),请将其写入文件并将该文件的 URI 传递给它。
此外,像这样将上下文传递给线程很危险,可能会导致内存泄漏。您需要确保在服务结束时线程也结束以防止它。
你的代码应该是这样的
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer = MediaPlayer.create(this, uri);
我有一个启动线程的服务,我需要在其中创建一个 MediaPlayer:
在onStartCommand
里面我调用了运行线程的main函数
public int onStartCommand(Context context, Intent intent, int flags, int startId) {
Log.e(TAG, "onStartCommand");
doTask(context);
return START_STICKY;
}
void doTask(Context context) {
isActive = true;
thread = new Thread(new Runnable() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void run() {
try {
threadLoop(context);
}
catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
Log.e(TAG, "Thread started");
}
在此之后,我正在 threadLoop
中尝试创建一个 MediaPlayer
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer = MediaPlayer.create(context, AudioData);
但我无法对第一个 context 参数执行任何操作。我尝试发送上下文并获取基础上下文,但它不起作用。
也许我应该为 MediaPlayer 使用其他服务?
提前致谢
更新
错误:
Cannot resolve method 'create(android.content.Context, short[])'
.
您向第二个参数传递了错误的数据。第一个参数没问题。第二个是资源 ID 或 Uri,而不是 short[]。如果短数组应该是音频数据(如原始 .wav 数据),请将其写入文件并将该文件的 URI 传递给它。
此外,像这样将上下文传递给线程很危险,可能会导致内存泄漏。您需要确保在服务结束时线程也结束以防止它。
你的代码应该是这样的
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer = MediaPlayer.create(this, uri);