gpt4 book ai didi

android - Android上的Media Player可以一起停止声音

转载 作者:行者123 更新时间:2023-12-03 01:02:18 25 4
gpt4 key购买 nike

我已经看到很多关于它的提早停止声音的帖子。这不是我的问题。我的问题是...我有这25种声音可以正常工作。摇动手机时,它会讲话,显示文字并具有动画效果,因此该人看起来就像在讲话。起初它工作得很好。我能够重现客户发现的问题的唯一方法是多次摇动它,然后再单击。摇回去并摇晃多次,然后再次单击。当我再次摇动几次后,它突然消失了。偶尔有人会奏效,但如果再回到原位通常会停止发出声音。其他所有功能均应正常运行。有人遇到过吗?任何帮助,将不胜感激。

public class Ask extends Activity{
private SensorManager mSensorManager;
private ShakeEventListener mSensorListener;
String[] answer;
int possibleAnswers, randomAnswer, talkRun=0, last=-1;
int shake0;
long lastClick;
private MediaPlayer mp, sound0;
Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ask);
Intent type = getIntent();
lastClick = type.getLongExtra("lastClick", 0);
context=this;

final Random generator = new Random();

possibleAnswers = 1;
answer = new String[possibleAnswers];
answer[0]="***Coughing***";



//Sounds
setVolumeControlStream(AudioManager.STREAM_MUSIC);
mp = MediaPlayer.create(this, R.raw.askbud);
mp.start();


mSensorListener = new ShakeEventListener();
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensorManager.registerListener(mSensorListener,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI);

final TextView tv = (TextView)findViewById(R.id.answer);


mSensorListener.setOnShakeListener(new ShakeEventListener.OnShakeListener() {

public void onShake() {
if (System.currentTimeMillis() - lastClick > 900) {
lastClick = System.currentTimeMillis();



randomAnswer = generator.nextInt(possibleAnswers);
if(last==randomAnswer)
randomAnswer = generator.nextInt(possibleAnswers);

animation();

if(randomAnswer==0){
if(shake0>=1){
sound0.reset();
}
shake0++;
sound0 = MediaPlayer.create(context, R.raw.coughing);
try {
sound0.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sound0.start();
}

});
}





@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(mSensorListener,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI);
}

@Override
protected void onStop() {
mSensorManager.unregisterListener(mSensorListener);
super.onStop();
}

}

只是对问题的一点补充。在我听不到声音后,即使关闭并重新打开应用程序,声音仍会继续发生。

最佳答案

好的,这要在注释中发布很多,因此这是您需要使用setDataSource()进行的操作。如果检查docs for setDataSource(),则会看到它需要FileDescriptor。您可以像这样获取Raw资源:

Resources res = getResources();
AssetFileDescriptor afd = res.openRawResourceFd(R.raw.coughing);
FileDescriptor fd = afd.getFileDescriptor();

//assuming existing MediaPlayer mp
mp.reset();
mp.setDataSource(fd);
mp.prepare();
mp.start();

关于android - Android上的Media Player可以一起停止声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7000309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com