Android 自訂SeekBar動態改變 硬體音量大小 實現和音量鍵的同步

來源:互聯網
上載者:User

標籤:number   onstop   script   tle   oct   keyword   cas   observer   ade   

1,:

2,代碼:

MainActivity.java

package com.hero.zhaoq.seekbarchangeddemo;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.database.ContentObserver;import android.media.AudioManager;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.widget.SeekBar;/** * Android實現  SeekBar更新音量  並實現  和硬體同步 */public class MainActivity extends AppCompatActivity {    private SeekBar seekbar_video;    private ContentObserver mVoiceObserver;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);//擷取媒體系統服務        seekbar_video= (SeekBar) findViewById(R.id.seekbar_video);//註冊ID        seekbar_video.setMax(15);//設定最大音量        seekbar_video.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));// 當前的媒體音量        myRegisterReceiver();//註冊同步更新的廣播        Log.i("lyj_ring", "mVoiceSeekBar max voluem = "+audioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM));        seekbar_video.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {            public void onStopTrackingTouch(SeekBar arg0) {            }            public void onStartTrackingTouch(SeekBar arg0) {            }            public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {                AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);                Log.v("lyj_ring", "mVoiceSeekBar max progress = "+arg1);                //系統音量和媒體音量同時更新                audioManager.setStreamVolume(AudioManager.STREAM_SYSTEM, arg1, 0);                audioManager.setStreamVolume(3, arg1, 0);//  3 代表  AudioManager.STREAM_MUSIC            }        });        mVoiceObserver = new ContentObserver(new Handler()) {            @Override            public void onChange(boolean selfChange) {                super.onChange(selfChange);                AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);                seekbar_video.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_SYSTEM));                //或者你也可以用媒體音量來監聽改變,效果都是一樣的。                //mVoiceSeekBar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));            }        };    }    private void myRegisterReceiver(){        MyVolumeReceiver  mVolumeReceiver = new MyVolumeReceiver() ;        IntentFilter filter = new IntentFilter() ;        filter.addAction("android.media.VOLUME_CHANGED_ACTION") ;        registerReceiver(mVolumeReceiver, filter) ;    }    /**     * 處理音量變化時的介面顯示     * @author long     */    private class MyVolumeReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            //如果音量發生變化則更改seekbar的位置            if(intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")){                AudioManager mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);                int currVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC) ;// 當前的媒體音量                seekbar_video.setProgress(currVolume) ;            }        }    }}

main_activity.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/ringtone_seekbar_parent"    android:layout_width="match_parent"    android:layout_height="160px"    android:layout_marginTop="0dip"    android:layout_weight="1"    android:gravity="center_vertical"    android:orientation="horizontal" >    <SeekBar        android:id="@+id/seekbar_video"        android:layout_width="match_parent"        android:layout_height="25dp"        android:max="0"        android:progress="0"        android:progressDrawable="@drawable/seekbar_progress_layer_list"        android:thumb="@mipmap/play_seekbar_icon"        android:layout_weight="18"/></LinearLayout>

seekbar_progress_layer_list.xml

<?xml version="1.0" encoding="utf-8"?><layer-list    xmlns:android="http://schemas.android.com/apk/res/android">    <!--未選中 狀態-->    <item android:id="@android:id/background"        android:drawable="@mipmap/volumn_bg" />    <!--&lt;!&ndash;選中狀態&ndash;&gt;-->    <item android:id="@android:id/progress">        <scale android:drawable="@mipmap/volumn_primary" android:scaleWidth="100%" />    </item></layer-list>

不是你不會只是你不知道而已……..
整個代碼實現很簡單。 筆者不在贅述。

註: 開啟demo,開啟歌曲。滑動seekbar即可改音量大小。

maybe你更需要這個:

源碼:
https://github.com/229457269/SeekBarChangedVoiceDemo

參考:http://blog.csdn.net/lyjit/article/details/51538951

Android 自訂SeekBar動態改變 硬體音量大小 實現和音量鍵的同步

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.