如果您需要播放音频/视频资源,您可以使用MediaPlayer对象,如果您有特殊需要,您可以将其包装。特别是,要显示视频,您需要一个SurfaceView及其持有者。无论如何,它的工作原理如下:
假设您的媒体资源位于原始文件夹中,媒体播放器可以是这样的:
import android.content.Context;
import android.media.MediaPlayer;
public class MyPlayer {
private MediaPlayer mPlayer;
private SurfaceHolder mSurfaceHolder;
public void play(Context c) {
if (mPlayer == null) {
mPlayer = MediaPlayer.create(c, R.<YOUR RESOURCE NAME>);
mPlayer.setDisplay(mSurfaceHolder);
//Sets a listener to the mPlayer variable that set's it to null once the playing is finished
mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
stop();
}
});
}
mPlayer.start();
}
public void pause() {
if (mPlayer.isPlaying()) {
mPlayer.pause();
}
}
public void stop() {
if (mPlayer != null) {
mPlayer.release();
mPlayer = null;
}
}
public void setSurface(SurfaceHolder sh) {
mSurfaceHolder = sh;
}
}
播放器将被封装在片段/活动中。假设有一个xml布局,其中SurfaceView作为“屏幕”和三个用于媒体控制的按钮,您的片段将如下所示:
public class PlayerFragment extends Fragment {
private Button mPlayButton;
private Button mPauseButton;
private Button mStopButton;
private SurfaceView mSurface;
private SurfaceHolder mHolder;
private MyPlayer mPlayer = new MyPlayer();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
//Gets the view and sets the player to be able to play a video resource
View v = inflater.inflate(R.layout.<YOUR XML LAYOUT>, parent, false);
mSurface = (SurfaceView) v.findViewById(R.id.surface);
mHolder = mSurface.getHolder();
mHolder.setKeepScreenOn(true);
mPlayer.setSurface(mHolder);
//Inflates the play button and sets on it a listener (created as an anonymous class)
mPlayButton = (Button) v.findViewById(R.id.playButton);
mPlayButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPlayer.play(getActivity());
}
});
//Inflates the pause button and sets on it a listener (created as an anonymous class)
mPauseButton = (Button) v.findViewById(R.id.pauseButton);
mPauseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPlayer.pause();
}
});
//Inflates the stop button and sets on it a listener (created as an anonymous class)
mStopButton = (Button) v.findViewById(R.id.stopButton);
mStopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPlayer.stop();
}
});
return v;
}
@Override
public void onDestroy() {
super.onDestroy();
mPlayer.stop();
}
}
请务必小心,在使用完媒体资源后,或在获得锁后活动/片段被销毁时,请释放媒体资源。如果不这样做,可能会影响其他应用程序或操作系统的行为。
显然,如果您需要更复杂的功能,您必须添加它们。这只是一个非常简单的播放器的示例。还要记住,可能的不兼容性可能会随着某种文件和/或设备而增加。
我相信答案是否定的,但是Twilio提供暂停/恢复录音的能力吗?用例是记录一个呼叫,但在收集敏感信息时暂停记录。从REST文档来看,它似乎不是一个受支持的功能。我想有人可能已经为这个要求找到了一些选择。
问题内容: 我正在尝试在下载管理器中实现暂停/恢复,我在网上搜索并阅读了几篇文章,并根据它们更改了我的代码,但是恢复似乎无法正常工作,有什么想法吗? 问题答案: 好的问题已解决,这是我的其他想要实现暂停/恢复的用户的代码:
我的目标是暂停录制文件。我在Android开发者网站上看到了它的但Media Recorder并没有暂停选项。 Java支持以编程方式合并两个音频文件,但在android中不起作用。 从Java中加入两个WAV文件? 而且我还使用了默认设备录音机应用程序,该应用程序适用于所有设备,但在三星中,很少有设备没有返回录制路径。 任何一个帮助语音录音暂停功能。
问题内容: 我在viewDidAppear中有一个图像,并用以下代码对其进行了动画处理: 我想在点击时暂停动画,如果再次点击它则继续播放动画。 问题答案: 暂停和恢复动画的2个功能,我从这里开始转换为Swift。 我有一个按钮可以暂停或恢复在中初始化的动画:
问题内容: 我有一个基本的Swing UI,带有一个标记为“播放”的按钮。按下按钮后,标签变为“暂停”。现在,当按下按钮时,它变为“继续”。 在“播放”中,我将实例化并执行一个SwingWorker。我想要的是能够暂停该线程(不要取消该线程),并根据上述按钮按下来恢复它。但是,我不想在doInBackground()中求助于Thread.sleep()。这似乎有点骇人听闻。有什么方法可以阻止运行d
我要做的是暂停< code>KafkaConsumer,如果在使用消息的过程中出现错误。 这是我写的 然后我写了一个REST服务来恢复消费者 现在,我有两个问题。第一个问题:当我打电话给消费者时。来自<code>@KafkaListener</code>注释方法的pause()会发生什么?消费者立即暂停,或者我可以接收到同一主题分区的其他偏移量上的其他消息。例如,我有偏移量为3的“message1