Android使用AudioManager修改系統(tǒng)音量的方法
本文實(shí)例講述了Android使用AudioManager修改系統(tǒng)音量的方法。分享給大家供大家參考,具體如下:
下面介紹幾個(gè)AudioManager的幾個(gè)音量調(diào)整方面的方法.
首先是得到AudioManager實(shí)例:
AudioManager am=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
調(diào)整音量方法有兩種,一種是漸進(jìn)式,即像手動(dòng)按音量鍵一樣,一步一步增加或減少,另一種是直接設(shè)置音量值.
1、漸進(jìn)式
public void adjustStreamVolume (int streamType, int direction, int flags) am.adjustStreamVolume (AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
解釋一下三個(gè)參數(shù)
第一個(gè)streamType是需要調(diào)整音量的類型,這里設(shè)的是媒體音量,可以是:
STREAM_ALARM 警報(bào)
STREAM_MUSIC 音樂(lè)回放即媒體音量
STREAM_NOTIFICATION 窗口頂部狀態(tài)欄Notification,
STREAM_RING 鈴聲
STREAM_SYSTEM 系統(tǒng)
STREAM_VOICE_CALL 通話
STREAM_DTMF 雙音多頻,不是很明白什么東西
第二個(gè)direction,是調(diào)整的方向,增加或減少,可以是:
ADJUST_LOWER 降低音量
ADJUST_RAISE 升高音量
ADJUST_SAME 保持不變,這個(gè)主要用于向用戶展示當(dāng)前的音量
第三個(gè)flags是一些附加參數(shù),只介紹兩個(gè)常用的
FLAG_PLAY_SOUND 調(diào)整音量時(shí)播放聲音
FLAG_SHOW_UI 調(diào)整時(shí)顯示音量條,就是按音量鍵出現(xiàn)的那個(gè)
2、直接設(shè)置音量值的方法:
public void setStreamVolume (int streamType, int index, int flags) am.setStreamVolume(AudioManager.STREAM_MUSIC, am.getStreamMaxVolume(AudioManager.STREAM_MUSIC), AudioManager.FLAG_PLAY_SOUND); am.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);//得到聽(tīng)筒模式的最大值 am.getStreamVolume(AudioManager.STREAM_VOICE_CALL);//得到聽(tīng)筒模式的當(dāng)前值
第一個(gè)和第三個(gè)參數(shù)與上面的相同
第二個(gè)參數(shù)是一個(gè)音量的int值,getStreamMaxVolume(int streamType)得到的是該類型音量的最大值,可以根據(jù)這個(gè)值計(jì)算你需要的音量,我這里直接調(diào)到最大.
最后我的代碼:
package com.lp;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import Android.app.Activity;
import Android.content.Context;
import Android.media.AudioFormat;
import Android.media.AudioManager;
import Android.media.AudioTrack;
import Android.os.Bundle;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.widget.Button;
import Android.widget.SeekBar;
/**
* AudioTrack 播放音頻 如wav格式
* 并允許調(diào)節(jié)音量
* @author Administrator
*
*/
public class MainActivity5 extends Activity {
private Button play;
private Button stop;
private SeekBar soundValue;
private AudioTrack at;
private AudioManager am;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_sk);
am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
play = (Button)findViewById(R.id.main_sk_play);
stop = (Button)findViewById(R.id.main_sk_stop);
soundValue = (SeekBar)findViewById(R.id.skbVolume);
setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
play.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(am.isSpeakerphoneOn()){
am.setSpeakerphoneOn(false);
}
//setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
am.setMode(AudioManager.MODE_IN_CALL);
System.out.println(am.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL));
System.out.println("&&&&&&&&&&&&&");
System.out.println(am.getStreamVolume(AudioManager.STREAM_VOICE_CALL));
//am.setStreamVolume(streamType, index, flags)
int bufferSizeInBytes = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
if(at==null){
at = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes, AudioTrack.MODE_STREAM);
System.out.println("22222");
//at.setStereoVolume(100f, 100f);
at.setStereoVolume(0.7f, 0.7f);//設(shè)置當(dāng)前音量大小
new AudioTrackThread().start();
}else{
if(at.getPlayState()==AudioTrack.PLAYSTATE_PLAYING){
System.out.println("111111111");
}else{
System.out.println("33333");
at = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes, AudioTrack.MODE_STREAM);
new AudioTrackThread().start();
}
}
}
});
stop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(at.getPlayState()==AudioTrack.PLAYSTATE_PLAYING){
try{
at.stop();
}catch (IllegalStateException e)
{
e.printStackTrace();
}
at.release();
am.setMode(AudioManager.MODE_NORMAL);
}
}
});
// soundValue.setMax(100);//音量調(diào)節(jié)的極限
// soundValue.setProgress(70);//設(shè)置seekbar的位置值
soundValue.setMax(am.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL));
soundValue.setProgress(am.getStreamVolume(AudioManager.STREAM_VOICE_CALL));
soundValue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// float vol=(float)(seekBar.getProgress())/(float)(seekBar.getMax());
// System.out.println(vol);
// at.setStereoVolume(vol, vol);//設(shè)置音量
am.setStreamVolume(AudioManager.STREAM_VOICE_CALL, seekBar.getProgress(), AudioManager.FLAG_PLAY_SOUND);
}
@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
}
});
}
class AudioTrackThread extends Thread{
@Override
public void run() {
byte[] out_bytes = new byte[44100];
InputStream is = getResources().openRawResource(R.raw.start);
int length ;
try{
at.play();
}catch (IllegalStateException e)
{
e.printStackTrace();
}
try {
while((length = is.read(out_bytes))!=-1){
//System.out.println(length);
at.write(out_bytes, 0, length);
}
} catch (IOException e) {
e.printStackTrace();
}
if(at.getPlayState()==AudioTrack.PLAYSTATE_PLAYING){
try{
at.stop();
}catch (IllegalStateException e)
{
e.printStackTrace();
}
at.release();
am.setMode(AudioManager.MODE_NORMAL);
}
}
}
}
當(dāng)然還要設(shè)置權(quán)限
<uses-permission Android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission Android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission Android:name="android.permission.RECORD_AUDIO" />
PS:關(guān)于Android Manifest功能與權(quán)限設(shè)置詳細(xì)內(nèi)容可參考本站在線工具:
Android Manifest功能與權(quán)限描述大全:
http://tools.jb51.net/table/AndroidManifest
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android視圖View技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android操作SQLite數(shù)據(jù)庫(kù)技巧總結(jié)》、《Android操作json格式數(shù)據(jù)技巧總結(jié)》、《Android數(shù)據(jù)庫(kù)操作技巧總結(jié)》、《Android文件操作技巧匯總》、《Android編程開(kāi)發(fā)之SD卡操作方法匯總》、《Android開(kāi)發(fā)入門與進(jìn)階教程》、《Android資源操作技巧匯總》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android系統(tǒng)音量條實(shí)例代碼
- Android編程實(shí)現(xiàn)音量按鈕添加監(jiān)聽(tīng)事件的方法
- android編程獲取和設(shè)置系統(tǒng)鈴聲和音量大小的方法
- Android 自定義SeekBar動(dòng)態(tài)改變硬件音量大小實(shí)現(xiàn)和音量鍵的同步(推薦)
- Android seekbar(自定義)控制音量同步更新
- Android 使用Vitamio打造自己的萬(wàn)能播放器(2)—— 手勢(shì)控制亮度、音量、縮放
- Android中自定義View實(shí)現(xiàn)圓環(huán)等待及相關(guān)的音量調(diào)節(jié)效果
- Android原生音量控制實(shí)例詳解
相關(guān)文章
Android基礎(chǔ)知識(shí)之tween動(dòng)畫(huà)效果
Android基礎(chǔ)知識(shí)之tween動(dòng)畫(huà)效果,Android一共提供了兩種動(dòng)畫(huà),這篇文章主要介紹了Android動(dòng)畫(huà)效果之tween動(dòng)畫(huà),感興趣的小伙伴們可以參考一下2016-06-06
Android 藍(lán)牙連接 ESC/POS 熱敏打印機(jī)打印實(shí)例(ESC/POS指令篇)
這篇文章主要介紹了Android 藍(lán)牙連接 ESC/POS 熱敏打印機(jī)打印實(shí)例(ESC/POS指令篇),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
Android開(kāi)發(fā)實(shí)現(xiàn)調(diào)節(jié)屏幕亮度功能
這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)調(diào)節(jié)屏幕亮度功能,涉及Android權(quán)限控制及屏幕亮度相關(guān)屬性操作技巧,需要的朋友可以參考下2018-03-03
Android?ViewPager2?+?Fragment?聯(lián)動(dòng)效果的實(shí)現(xiàn)思路
這篇文章主要介紹了Android?ViewPager2?+?Fragment?聯(lián)動(dòng),本篇主要介紹一下 ViewPager2 + Fragment聯(lián)動(dòng)效果的實(shí)現(xiàn)思路,需要的朋友可以參考下2022-12-12
Android實(shí)現(xiàn)文件存儲(chǔ)并讀取的示例代碼
本篇文章主要介紹了Android實(shí)現(xiàn)文件存儲(chǔ)的示例代碼,文件內(nèi)容可以分別存儲(chǔ)在手機(jī)內(nèi)存和外存中,并且都可以讀去取出來(lái),有興趣的可以了解一下。2017-01-01
Android編程實(shí)現(xiàn)圖片的上傳和下載功能示例
這篇文章主要介紹了Android編程實(shí)現(xiàn)圖片的上傳和下載功能,涉及Android針對(duì)圖片的字節(jié)流轉(zhuǎn)換與傳輸操作相關(guān)技巧,需要的朋友可以參考下2016-10-10
Android實(shí)現(xiàn)網(wǎng)頁(yè)圖片瀏覽功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)網(wǎng)頁(yè)圖片瀏覽功能,輸入圖片的url然后點(diǎn)擊按鈕加載出來(lái)圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
Android實(shí)現(xiàn)在map上畫(huà)出路線的方法
這篇文章主要介紹了Android實(shí)現(xiàn)在map上畫(huà)出路線的方法,較為詳細(xì)的分析了Android在map上繪制路線所涉及的map圖調(diào)用、畫(huà)筆的使用、頁(yè)面布局及權(quán)限控制的相關(guān)技巧,需要的朋友可以參考下2015-07-07

