Android 利用seekbar结合AudioManager调节系统音量

来源:互联网 发布:2016下半年的网络综艺 编辑:程序博客网 时间:2024/04/30 14:15

花了一个上午的时间,查了许多资料和官方文档,总结了一下自己如何利用seekbar做出类似于按侧边控件弹出的音量控制。

我是利用按下喇叭按钮。然后,弹出一个Alertdialog,其中用到了setAdapter方法,见一个baseadapter加载进去。如下:

Builder builder=new AlertDialog.Builder(mcontext);

builder.setAdapter(adapter,new DialogInterface.OnClickListener() {
            
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                
            }
        }).create().show();

不多说了,先贴上代码:

/**
     * 调整音量

     */
    private void adjustVoice() {
        // TODO Auto-generated method stub
        
        Builder builder=new AlertDialog.Builder(mcontext);
        BaseAdapter adapter=new BaseAdapter() {//
            class Holder{
                SeekBar seekbar;
            }
            
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub
                //final SeekBar replaceseekbar;
                LayoutInflater inflater=LayoutInflater.from(mcontext);
                Holder holder=null;
                if(convertView==null){
                    holder=new Holder();
                    convertView=inflater.inflate(R.layout.hsp_seekbar, null);
                    holder.seekbar=(SeekBar) convertView.findViewById(R.id.seekBar1);
                    convertView.setTag(holder);
                }
                else{
                    holder=(Holder)convertView.getTag();
                }
                
                final AudioManager audio=(AudioManager) mcontext.getSystemService(Context.AUDIO_SERVICE);
                int currentvolume=audio.getStreamVolume(AudioManager.STREAM_VOICE_CALL);//get the current volume
                int maxvolume=audio.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);//get the max volume
                holder.seekbar.setProgress(currentvolume*100/maxvolume);//初始化音量
                Log.e("VOLUME", String.valueOf(currentvolume*100/maxvolume));//必须先*100,否则会为0
                holder.seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                    
                    @Override
                    public void onStopTrackingTouch(SeekBar seekBar) {
                        // TODO Auto-generated method stub
                    }
                    
                    @Override
                    public void onStartTrackingTouch(SeekBar seekBar) {
                        // TODO Auto-generated method stub        
                    }
                    
                    @Override
                    public void onProgressChanged(SeekBar seekBar, int progress,
                            boolean fromUser) {
                        // TODO Auto-generated method stub
                        //调整音量的核心代码处
                        Log.e("VOLUME1", String.valueOf(progress));//测试
                        Log.e("VOLUME2", String.valueOf(progress/20));//测试
                        audio.setStreamVolume(AudioManager.STREAM_VOICE_CALL, progress/20, 0);
                        seekBar.setProgress(progress);
                    }
                });
                return convertView;
            }
            
            @Override
            public long getItemId(int position) {
                // TODO Auto-generated method stub
                return position;
            }
            
            @Override
            public Object getItem(int arg0) {
                // TODO Auto-generated method stub
                return 1;
            }
           
            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return 1;
            }
        };
        builder.setAdapter(adapter,new DialogInterface.OnClickListener() {
            
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                
            }
        }).create().show();

    }

在下面是我的seekbar的xml:(aa去掉下面)

R.layout.hsp_seekbar.xml

点击喇叭按钮就可以出现你要的效果啦!


0 0
原创粉丝点击