㈠ android 實現靜音的幾種技術
//關閉揚聲器
public void CloseSpeaker() {
try {
AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
if(audioManager != null) {
if(audioManager.isSpeakerphoneOn()) {
audioManager.setSpeakerphoneOn(false);
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,currVolume,
AudioManager.STREAM_VOICE_CALL);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
㈡ 安卓手機通話怎麼錄音
若是使用vivo手機,撥打電話時,點擊通話界面的「錄音」即可錄制通話內容。
一、設置通話自動錄音的方法:
1、進入i管家--實用工具--輔助功能--通話錄音--選擇「所有通話自動錄音」或「指定」號碼自動錄音;
2、設置--(應用與許可權--系統應用設置)--電話--通話錄音--選擇「所有通話自動錄音」或「指定號碼自動錄音」,設置後,當開始通話時,手機會自動進行錄音。
㈢ Android 怎麼判斷設備是否靜音
靜音就是音量為0了, 用AudioManager來取當前的音量,判斷是否為0即可。
但是Android系統的音量有很多種:STREAM_VOICE_CALL、STREAM_SYSTEM、STREAM_RING、STREAM_MUSIC、STREAM_ALARM
㈣ android怎麼調用系統聲音
Android中手機聲音調節步驟:
a、通過系統服務獲得聲音管理器:
AudioManager audioManager = (AudioManager)getSystemService(Service.AUDIO_SERVICE);
b、根據實際需要調用適當的方法:(常用方法)
audioManager.adjustStreamVolume(int streamType, int direction, int flags);
streamType:聲音類型,可取的為STREAM_VOICE_CALL(打電話時的聲音), STREAM_SYSTEM(Android系統聲音), STREAM_RING(電話鈴響), STREAM_MUSIC(音樂聲音)or STREAM_ALARM(警告聲音)。
direction:調整音量的方向,可取為ADJUST_LOWER(調低音量), ADJUST_RAISE(調高音量), or ADJUST_SAME(保持先前音量)。
flags:可選標志位(如要顯示出音量調節UI,使用如下flag:AudioManager.FLAG_SHOW_UI)。
audioManager.setStreamMute(int streamType, boolean state);設置指定聲音類型(streamType)是否為靜音。如果state為true,則設置為靜音;否則,不設置為靜音。
audioManager.setRingerMode(int ringerMode);
設置鈴音模式,可取值為RINGER_MODE_NORMAL(鈴音正常模式), RINGER_MODE_SILENT(鈴音靜音模式), or RINGER_MODE_VIBRATE(鈴音震動模式,即鈴音為靜音,啟動震動)。
audioManager.setMode(int mode);
設置聲音模式,可取值為MODE_NORMAL(正常模式,即在沒有鈴音與電話的情況), MODE_RINGTONE(鈴響模式), MODE_IN_CALL(接通電話模式)or MODE_IN_COMMUNICATION(通話模式)。
注意:聲音的調節是沒有許可權要求的。
㈤ 關於Android的MediaRecorder.AudioSource設置成VOICE_CALL為什麼錄不到聲音
法律 問題 ,導致 不少 手機 禁止 了 VOICE_CALL
㈥ Android音頻播放
最近需要在Android的客戶端中使用PCM聲音播放和錄制,簡單學習了一下。有不正確的地方還請指出。
首先有幾個概念需要了解一下:采樣頻率、聲道數、采樣位數。
采樣頻率一般是sample rate, 代表的是數字化音頻時每秒采樣的次數。常見的有44.1KHz(CD品質)、48KHz等。
這個很好理解,單聲道Mono就是聲音從一個方向傳出來;雙聲道Stereo也叫立體聲,聲音是從兩個方向傳來。通常的流行音樂中,仔細聽能發現每個聲道可能側重不同的樂曲聲部,比如左聲道吉他,右聲道鋼琴,人聲似乎兩個聲道都有,聽起來就像站在中間一樣。(這里沒有考證,隨便舉例)
每一個采樣都是一個數據點,采樣位數是指這個數據點使用了幾位來記錄。AudioTrack類只支持8位和16位的PCM音頻。8位就是2的8次方,即256個值;而16位則是2的16次方,有65536個值。
這個在音頻的編解碼中還是比較常用的。在PCM格式中,1秒鍾音頻的數據大小是SampleRate×Channel×Bit/8,單位是byte位元組。由於PCM本身沒有音頻幀的概念,所以通過這個公式就能計算出任意時長音頻的大小,或者得到任意大小音頻的時長。如果規定1個音頻幀是「每個聲道256個采樣」,雙聲道下就是512個采樣,那麼1幀的數據量就是256×Channel×Bit/8,同理可以推斷出1秒鍾有多少音頻幀等等。音頻幀的概念在各種編解碼中各有不同,但計算公式大同小異,這里不展開。
Android中音頻的播放使用的是AudioTrack類,具體用法非常簡單。
首先設置buffer大小。AudioTrack播放時需要先寫入buffer,如果這個buffer沒有寫滿,那麼這部分是不會播放的。所以buffer不能設置太小,這樣會導致播放不連貫;而buffer也不能設置太小,這樣不間斷寫入會消耗許多CPU資源。AudioTrack自帶了getMinBufferSize方法可以給出一個最小buffer,一般用這個值就可以。getMinBufferSize方法三個參數分別是sample rate、channel和bit。
設置完buffer size就可以實例化一個AudioTrack。其中第一個參數streamType是指不同的音頻流類型,包括STREAM_MUSIC、STREAM_ALARM、STREAM_VOICE_CALL、STREAM_RING等,是Android對不同音頻的分類。中間三個參數很好理解,第四個是buffer size,剛剛計算出來了。最後一個參數mode有兩種:MODE_STREAM和MODE_STATIC。前者是以流形式播放,後者則是一次性全部寫入然後播放。
調用實例的play()方法就可以開始播放了。不過播放得要有數據吧?要填寫數據就要用到write()方法。write方法中第一個參數是一個byte[]類型,是要寫入的數據源,可以是從文件流中讀取出來的;第二個參數offset是初始位移,即從source的哪個位置開始;第三個參數則是輸入長度。
當write方法寫滿一個AudioTrack的buffer時,就會有聲音播放出來了。
當播放完成後記得要把AudioTrack停止並釋放。
㈦ Android中如何實現通話內錄
在通話是直接按(真實按鍵不是屏幕里的)最左邊的鍵,就可以看到錄音了
㈧ android 5.0怎麼設置音樂從聽筒播放
5.0 之前 可以用AudioManager.setMode來設置phone state 來達到切換聽筒的目的,但是5.0之後非系統應用沒有這個許可權了。發現微信依然可以切換,研究了下底層設備切換發現是如下操作的:
1.播放音頻流類型要設置為AudioManager.STREAM_VOICE_CALL
2.在播放前調用AudioSystem.setForceUse(AudioSystem.FOR_COMMUNICATION,AudioSystem.FORCE_NONE);
這個調用需要 在AndroidManifest.xml中添加 android.permission.MODIFY_AUDIO_SETTINGS 許可權
並且AudioSystem這個類是隱藏類,在Android 公開API中沒有,所以需要用反射調用,或者自己編譯出一個framework.jar包,放到工程里,不過這樣有可能兼容性不是很好。
㈨ android5.1設置所有音量通道為媒體音量
如進入一個頁面希望設置媒體音量為最大:代碼如下:
//獲取最大媒體音量值
int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
//設置媒體音量為最大值,當然也可以設置媒體音量為其他給定的值
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, max,0);
java代碼:
AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
//通話音量
int max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL );
int current = mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL );
Log.d(「VIOCE_CALL」, 「max : 」 + max + 」 current : 」 + current);
//系統音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_SYSTEM );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_SYSTEM );
Log.d(「SYSTEM」, 「max : 」 + max + 」 current : 」 + current);
//鈴聲音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_RING );
Log.d(「RING」, 「max : 」 + max + 」 current : 」 + current);
//音樂音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC );
Log.d(「MUSIC」, 「max : 」 + max + 」 current : 」 + current);
//提示聲音音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_ALARM );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_ALARM );
Log.d(「ALARM」, 「max : 」 + max + 」 current : 」 + current);
ps:
游戲過程中只允許調整多媒體音量,而不允許調整通話音量。
setVolumeControlStream(AudioManager.STREAM_MUSIC);
長時間不動,不允許黑屏,View.setKeepScreenOn(true);
估計manifest文件中需要注冊許可權吧
調節媒體音量
AudioManager audio = (AudioManager) getSystemService(Service.AUDIO_SERVICE);
//參數三AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI表示在調整媒體音量的時候會發出聲音,並且彈出音量調整對話框
//如果不想要這些,可以設置為0
mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE, AudioManager.FLAG_PLAY_SOUND
| AudioManager.FLAG_SHOW_UI);
重寫 Activity 的 onKeyDown 方法
@Override
public
boolean
onKeyDown(
int
keyCode, KeyEvent event) {
switch
(keyCode) {
case
KeyEvent.KEYCODE_VOLUME_UP:
audio.adjustStreamVolume(
AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE,
AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
return
true
;
case
KeyEvent.KEYCODE_VOLUME_DOWN:
audio.adjustStreamVolume(
AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_LOWER,
AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
return
true
;
default
:
break
;
}
return
super
.onKeyDown(keyCode, event);
}
㈩ android聲音通道怎麼理解
由於使用的是耳機 麥克分離式的耳機,所以要分別上報事件。在Android系統層耳機插孔的檢測是基於/sys/class/switch/h2w/state的值來判斷的(以4.4.4_r2為例子位於WiredAccessoryManager.java)。
只要在內核中實現一個「或真或假」的基於switch類的h2w開關。Android系統就可以監聽到插拔信息。
在播放音樂的時候插入耳機,使用tinymix(參考:Android音頻底層調試-基於tinyalsa)命令可以查找到Playback Path的值從SPK變為HP_NO_MIC,就可以說明耳機插拔軟體檢測正常了。
# tinymix
Mixer name: 'RK_RK616_TINY'
Number of controls: 7
ctl type num name value
0 ENUM 1 Playback Path HP_NO_MIC
1 ENUM 1 Capture MIC Path MIC OFF
2 ENUM 1 Voice Call Path OFF
3 ENUM 1 Voip Path OFF
4 INT 2 Speaker Playback Volume 24 24
5 INT 2 Headphone Playback Volume 24 24
6 ENUM 1 Modem Input Enable ON