【问题标题】:Connecting Hardware device buttons to SeekBar将硬件设备按钮连接到 SeekBar
【发布时间】:2014-01-10 08:58:47
【问题描述】:

如何将硬件设备按钮与用于音量的搜索栏连接起来? 所以每次我点击硬件按钮例如增加音量时,Seek Bar 也会增加,反之亦然

public void initControls()
{
    try
    {
        volumeSeekbar = (SeekBar)findViewById(R.id.seekBar1);
        audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        volumeSeekbar.setMax(audioManager
                .getStreamMaxVolume(AudioManager.STREAM_MUSIC));
        volumeSeekbar.setProgress(audioManager
                .getStreamVolume(AudioManager.STREAM_MUSIC));   


        volumeSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
        {
            @Override
            public void onStopTrackingTouch(SeekBar arg0) 
            {
            }

            @Override
            public void onStartTrackingTouch(SeekBar arg0) 
            {
            }

            @Override
            public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) 
            {
                audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                        progress, 0);
            }

        });

    }
    catch (Exception e) 
    {
        e.printStackTrace();
    }

}
@Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
      if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) 
     { 
            int index = seekbar1.getProgress(); 
            seekbar1.setProgress(index + 1); 
            return true; 
     } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
      {
            int index = seekbar1.getProgress(); 
            seekbar1.setProgress(index - 1); 
            return true; 
     }
      return super.onKeyDown(keyCode, event); 
     }

这是编辑后的代码,我收到错误类型对象的 onKeyDown (int, keyEvent) 方法未定义。

【问题讨论】:

  • 嘿,伙计,请把这段代码写出当前块......使搜索栏全局并相应地访问那里的值......你为什么在 setOnSeekBarChangeListener 中使用键事件......请把代码写在外面其中...以与生命周期方法平行的方式编写
  • 公共类 MainActivity 扩展 Activity { @Override public boolean onKeyDown(int keyCode, KeyEvent event) { super.onKeyDown(keyCode, event); if (keyCode == KeyEvent.KEYCODE_BACK) { // 你的代码在这里返回 true; } 返回假; } }
  • 它应该在主要活动里面...
  • 请把代码写在外面,...它会工作的
  • 嘿伙计,我这样做了,它没有给我任何代码错误,但是当我使用手机上的任何硬件按钮时,应用程序崩溃了。这是 logcat:prntscr.com/2i2nch

标签: android button hardware volume seekbar


【解决方案1】:
public boolean onKeyDown(int keyCode, KeyEvent event) {
          if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) 
         { 
              mediaVlmSeekBar = (SeekBar) findViewById(R.id.seekBar1);
                int index = mediaVlmSeekBar.getProgress(); 
                mediaVlmSeekBar.setProgress(index + 1); 
                return true; 
         } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
          {
                int index = mediaVlmSeekBar.getProgress(); 
                mediaVlmSeekBar.setProgress(index - 1); 
                return true; 
         }
          return super.onKeyDown(keyCode, event); 
         }

【讨论】:

  • 你能解释一下为什么这回答了这个问题吗?
  • 当我们点击硬件按钮键 VOLUME_UP 或 VOLUME_DOWN 调用到 onKeyDown 方法,你可以把你的代码放在 onKeyDown 以增加音量和 Seek Bar 增加,反之亦然使用 KeyEvent
【解决方案2】:

通过用类似这样的东西覆盖按钮输入;

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
   if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP) { 
       // Do your thing 
       return true;
   } else {
       return super.onKeyDown(keyCode, event); 
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 2016-11-21
    • 2019-08-11
    • 2011-11-08
    • 2011-02-10
    • 2021-11-21
    相关资源
    最近更新 更多