0

我从加速度计值中有以下“如果条件”,并且当设备平坦时,会连续播放哔声。我不知道如何让这个声音在指定的时间段内重复(例如:5 秒)。我尝试了很多方法,但声音一直在播放,或者不符合 if 条件。如果有人可以帮助我..提前谢谢你..

if (x > -0.1 && x < 0.1 && y > -0.1 && y < 0.1) {
  try {
    AssetFileDescriptor afd = getAssets().openFd("beep.wav");
    mMediaplayer = new MediaPlayer();
    mMediaplayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
    afd.close();
    mMediaplayer.prepare();
    mMediaplayer.start();
    mMediaplayer.setOnCompletionListener(new OnCompletionListener() {
      public void onCompletion(MediaPlayer mp) {
        //mp.setLooping(false);
        mp.stop();
        mp.release();
      }
    });
  } catch (Exception e) {
    e.printStackTrace();
  }
}
4

2 回答 2

0

您可以使用重复警报。

int secondsInterval = 5; // 5 seconds for example
long interval = secondsInterval * 1000;
long firstTime = Calendar.getInstance().getTimeInMillis();

Intent i = new Intent(ctx, AlarmHandler.class);
PendingIntent mAlarmSender = PendingIntent.getService(ctx, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager am = (AlarmManager) ctx.getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, firstTime, interval, mAlarmSender);

然后,您应该将代码包含在 Intent 处理程序类(上述代码中的 AlarmHandler.class)中的类似方法中:

@Override
protected void onHandleIntent(Intent arg0) {
    // your code here
}
于 2013-04-09T14:36:28.723 回答
0

为什么不在后台的新异步任务中播放媒体播放器?创建您自己的异步任务实现,然后在其构造函数中传递一个时间值,然后在那里启动媒体播放器并继续检查它以查看经过的持续时间是否等于传递给它的值。我认为这可能会有所帮助-->

http://developer.android.com/reference/android/os/AsyncTask.html

于 2013-04-09T12:09:02.613 回答