Android - 在按钮单击时取消静音 VideoView
Posted
技术标签:
【中文标题】Android - 在按钮单击时取消静音 VideoView【英文标题】:Android - Unmute VideoView on Button Click 【发布时间】:2018-02-02 09:20:39 【问题描述】:我实际上正在设置一个简单的 videoView,当活动开始时会静音(声音),然后可以通过按下按钮激活声音。
我不想使用 AudioManager,而是使用媒体播放器。我还没有发现我做错了什么。寻求帮助。
我的代码实际上是在 Kotlin 中,但我相信即使是 java 解决方案也会对我有所帮助。
这是我的代码:
import android.net.Uri
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.VideoView
import android.util.DisplayMetrics
import android.media.MediaPlayer.OnPreparedListener
import android.widget.ImageButton
import android.widget.TextView
class AboutActivity : AppCompatActivity()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_about)
supportActionBar?.setDisplayHomeAsUpEnabled(true) /*show back button*/
/*Display video*/
val video = findViewById<VideoView>(R.id.coverVideo)
video.setVideoPath(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.cover).toString());
video.start() /*Start video automatically*/
//Get screen size
val displaymetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(displaymetrics)
val width = displaymetrics.widthPixels //get width
val video_height = 9 * width / 16 //calculate height for 16:9 format
//Set video height
val params = video.getLayoutParams()
params.width = width
params.height = video_height
video.setLayoutParams(params)
video.setOnPreparedListener(
mp -> mp.isLooping = true; //Make it loop
mp.setVolume(0f, 0f); //Mute
)
val speaker = findViewById<ImageButton>(R.id.speaker)
speaker.setOnClickListener speakerPressed(video)
override fun onBackPressed()
super.onBackPressed()
overridePendingTransition(R.anim.hold, R.anim.fade_out)
fun speakerPressed(v: Any)
val v = findViewById<VideoView>(R.id.coverVideo)
v.setOnPreparedListener(
mp -> mp.setVolume(1.0f, 1.0f); //Unmute
)
val VideoView = findViewById<TextView>(R.id.textView6)
VideoView.text = "ButtonPressed" //Checking if the click setup works
【问题讨论】:
可能是重复问题here 嗨,谢谢你的回答,我已经看过那个帖子了,不幸的是,由于某种原因,那里的答案对我不起作用 你检查过(通过调试器)speakerPressed
方法是否被调用过?还要检查 lambda 中的 mp
是什么,以确保您正在修改正确的对象。
我确实检查了speakerPressed,它被调用了。我实际上是在尝试寻找一种不同的方式来设置 mediaPlayer,这可能是问题所在。
【参考方案1】:
据我了解,您只是想通过一个按钮将音量静音和取消静音。就我而言,我自己使用自定义按钮做了一些非常相似的事情,因为我不希望整个笨重的媒体播放器位于 videoView 的底部。设置 MediaController 和 setOnPreparedListener 后,我使用 MediaPlayer 将音量设置为 0 mc.setVolume(0F, 0F) 并将音量设置回用户允许的最大 mc.setVolume(1F, 1F)
在您的代码中,我没有看到您将 mediaController 分配给 videoView,如下面的所示。之后,我只是 setVisibility(View.GONE)。没有 MediaController,我根本没有音量
private static final String TAG = IntroMovieActivity.class.getSimpleName();
private boolean mVolumePlaying = true;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_intro_movie);
mVideoView = this.findViewById(R.id.videoView);
Uri uri = Uri.parse("android.resource://"+ this.getPackageName()+"/raw/"+"intro");
MediaController mc = new MediaController(this);
mVideoView.setMediaController(mc);
mVideoView.setOnPreparedListener(mp -> setVolumeControl(mp));
mVideoView.setVideoURI(uri);
mVideoView.setOnCompletionListener(mp -> mVideoView.start());
mc.setVisibility(GONE);
private void setVolumeControl(MediaPlayer mp)
AppCompatImageView volume = findViewById(R.id.volume);
volume.setOnClickListener(v ->
if(mVolumePlaying)
Log.d(TAG, "setVolume OFF");
volume.setImageResource(R.drawable.ic_volume_off_black_36_dp_80alpha);
mp.setVolume(0F, 0F);
else
Log.d(TAG, "setVolume ON");
volume.setImageResource(R.drawable.ic_volume_up_black_36dp_80alpha);
mp.setVolume(1F, 1F);
mVolumePlaying = !mVolumePlaying;
);
【讨论】:
以上是关于Android - 在按钮单击时取消静音 VideoView的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3:如何在使用 AVFoundation 录制视频期间将麦克风静音/取消静音