【问题标题】:Android - Unmute VideoView on Button ClickAndroid - 在按钮单击时取消静音 VideoView
【发布时间】: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,这可能是问题所在。

标签: android video kotlin android-videoview


【解决方案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;
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    相关资源
    最近更新 更多