连接Seekbar与设备上的硬件按钮

时间:2014-01-10 14:30:48

标签: android button hardware seekbar

import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;



public class pushke extends Activity {


    private SeekBar volumeSeekbar = null;
    private AudioManager audioManager = null; 
      MediaPlayer mp;
      MediaPlayer mp2;
      MediaPlayer mp3;
      MediaPlayer mp4;
      MediaPlayer mp5;
      MediaPlayer mp6;
      SeekBar seekGuns;
      RelativeLayout rguns;


     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setVolumeControlStream(AudioManager.STREAM_MUSIC);
            setContentView(R.layout.guns);
            initControls();
           rguns=(RelativeLayout) findViewById(R.id.rguns);



mp=MediaPlayer.create(this, R.raw.hekler);
ImageButton btn1 = (ImageButton) findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {


        if (mp2.isPlaying()){
            mp2.pause();
            mp2.seekTo(0);
        }
        if (mp3.isPlaying()){
            mp3.pause();
            mp3.seekTo(0);
        }
        if (mp4.isPlaying()){
            mp4.pause();
            mp4.seekTo(0);
        }
        if (mp5.isPlaying()){
            mp5.pause();
            mp5.seekTo(0);

        }
        if (mp6.isPlaying()){
            mp6.pause();
            mp6.seekTo(0);

        }
        if (mp.isPlaying()){
            mp.pause();
            mp.seekTo(0);
        }
        else{
            mp.start();
        }

    }
});
} 
     private void initControls()
    {
        try
        {
            volumeSeekbar = (SeekBar)findViewById(R.id.seekGuns);
            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 = seekGuns.getProgress(); 
          seekGuns.setProgress(index + 1); 
          return true; 
   } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
    {
          int index = seekGuns.getProgress(); 
          seekGuns.setProgress(index - 1); 
          return true; 
   }
    return super.onKeyDown(keyCode, event); 
   }

我正在尝试将硬件按钮连接到我的搜索栏,所以当我点击音量按钮时,搜索栏用于音量,增加 - 减少取决于我按下的按钮。 我得到了这个应该正常工作的代码,但我不知道为什么它在我的情况下不起作用,每次我在手机上作为模拟器启动我的应用程序,并使用硬件卷按钮应用程序崩溃。 我在LoGcat中得到了这个,但我不知道如何解决它或问题出在哪里因为eclipse没有向我显示任何错误。 这是我的logcat:http://i.imgur.com/o4qSvCv.png

1 个答案:

答案 0 :(得分:3)

这是因为您已声明了两个 Seekbar 变量。

 private SeekBar volumeSeekbar = null;
 SeekBar seekGuns;

并且在您的 onKeyDown 方法中,您正在使用未经初始化的 seekGuns 命名变量。

所以你有两个选择。

1)初始化意味着找到 seekguns 变量的ID。

2)在 onKeyDown 中使用 volumeSeekbar 代替 seekguns 方法。