『壹』 android系統如何實現無極音量調節
首先,請大家打開安卓手機的設置應用,進入手機的設置應用界面。在設置應用中,點擊「聲音和振動選項」。接下來,我們會看到音量調節選項,點擊進入音量調節。在音量調節的時候要注意以下幾點:音量分為媒體音量和鈴聲音量等好幾類,一般情況下如果我們將手機設置為靜音的話,就是直接按下快捷功能的靜音圖標,只是將鈴聲設置為靜音,其他的音量還是沒有變化。因此,才會出現我們的手機明明是靜音的狀態,打開游戲的時候卻還是會有聲音,所以,一起定要將媒體音量以及鬧鍾音量設置一下,這個是很重要的啦。
『貳』 android系統音量為什麼要+5/10
調整音量方法有兩種,一種是漸進式,即像手動按音量鍵一樣,一步一步增加或減少,另一種是直接設置音量值.
1、漸進式
public void adjustStreamVolume (int streamType, int direction, int flags)
am.adjustStreamVolume (AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
解釋一下三個參數
第一個streamType是需要調整音量的類型,這里設的是媒體音量,可以是:
STREAM_ALARM 警報
STREAM_MUSIC 音樂回放即媒體音量
STREAM_NOTIFICATION 窗口頂部狀態欄Notification,
STREAM_RING 鈴聲
STREAM_SYSTEM 系統
STREAM_VOICE_CALL 通話
STREAM_DTMF 雙音多頻,不是很明白什麼東西
第二個direction,是調整的方向,增加或減少,可以是:
ADJUST_LOWER 降低音量
ADJUST_RAISE 升高音量
ADJUST_SAME 保持不變,這個主要用於向用戶展示當前的音量
第三個flags是一些附加參數,只介紹兩個常用的
FLAG_PLAY_SOUND 調整音量時播放聲音
FLAG_SHOW_UI 調整時顯示音量條,就是按音量鍵出現的那個
2、直接設置音量值的方法:
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);//得到聽筒模式的最大值
am.getStreamVolume(AudioManager.STREAM_VOICE_CALL);//得到聽筒模式的當前值
第一個和第三個參數與上面的相同
第二個參數是一個音量的int值,getStreamMaxVolume(int streamType)得到的是該類型音量的最大值,可以根據這個值計算你需要的音量,我這里直接調到最大.
最後我的代碼:
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格式
* 並允許調節音量
* @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);//設置當前音量大小
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);//音量調節的極限
// soundValue.setProgress(70);//設置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);//設置音量
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);
}
}
}
}
當然 許可權
<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" />
『叄』 如何修改Android5.1系統音量大小
應用能夠配置Android系統的各種設置,這些設置的默認值都是由frameworks中的SettingsProvider從資料庫中讀取的frameworks/base/packages/SettingsProvider/res/values/defaults.xml這個文件就是用來存儲默認值的 Android 系統設置中的默認設置如下所示: <integer name="def_screen_off_timeout">600000</integer>設置關屏超時時間的默認值 <integer name="def_screen_brightness">102</integer> 設置亮度的默認值 <bool name="def_install_non_market_apps">false</bool>設置是否允許安裝非Market應用程序的默認值 開機圖片: android-logo-mask.png android-logo-shine.png 這兩個圖片一個在上一個在下 ./out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/classes/assets/images/android-logo-shine.png ./frameworks/base/core/res/assets/images/android-logo-shine.png 注意:如果源碼沒有make可以直接更改frameworks里的的圖片就可以了 然後直接make否則必須全更改並且不能make只能make firmwar 默認開機牆紙的位置: default_wallpaper.jpg ./out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/classes/res/drawable/default_wallpaper.jpg ./frameworks/base/core/res/res/drawable/default_wallpaper.jpg 注意:這個設置和上面的一樣這倆個都不能更改文件名 更改PC機器刪除硬體的文字kernel中 drivers/usb/gadget/f_mass_storage.c fsg->vendor = "XXXXXXXXXXXXX"; 更改卷標: bootable/recovery/etc/init.rc setprop UserVolumeLabel "XXXXXXXXXXXXX" 直接打包 修改屏幕鎖: (1)frameworks/base/packages/SettingsProvider/res/values/defaults.xml <integer name="def_screen_off_timeout">60000</integer> 60000改成想要的時間如果是不鎖為-1(2)frameworks/policies/base/phone/com/android/internal/policy/impl/KeyguardViewMediator.java private boolean mExternallyEnabled = true; 將其修改成false,這樣更改就不會再進入休眠狀態了 設定初始化主頁: package/app/Browser/res/values/String.xml 655行 後面的應該是書簽里的 設定亮度0~255: frameworks/base/packages/SettingsProvider/res/values/defaults.xml def_screen_brightness-->這個值初始化好像是100多 音量: frameworks/base/media/java/android/media/AudioManager.java 數組DEFAULT_STREAM_VOLUME第4個值(最大我設置到30但是還是差2格才到最大--默認是11 建議將數組里的所有的數值都設為最大就OK了) 設置Google帳戶,左上角提示「正在設置RK2818SDK」,要求改成「正在設置W9」: out\target\proct\sdkDemo\root 中default.prop文件第13行 ro.proct.model=rk2818sdk 改為 ro.proct.model=W9 錄音沒有小時顯示。要求增加: packages\apps\SoundRecorder\src\com\android\soundrecorder (1)SoundRecorder.java中: private void updateTimerView() 把 String timeStr = String.format(mTimerFormat, time/60, time%60); 改為:long hour=time/3600; String timeStr = String.format(mTimerFormat, hour, (time-hour*3600)/60, time%60); (2) \res\values中strings.xml改為: <string name="timer_format"><xliff:g id="format">%02d:%02d:%02d</xliff:g></string> 去掉Bluetooth: (主界面->添加文件夾->Bluetooth received) ic_launcher_folder_bluetooth.png(72*72): 在\packages\apps\Bluetooth\res\drawable-hdpi 解決方法:刪除\out\target\proct\sdkDemo\system\app下的Bluetooth.apk 充電鎖屏時圖片: frameworks\base\core\res\res\drawable-hdpi:ic_lock_idle_charging.png 去掉鎖屏時顯示充電百分比在: frameworks\base\core\res\res\values-zh-rCN中strings.xml 的lockscreen_plugged_in 括弧中的內容及括弧 !! 去掉動態桌面背景選項: packages\wallpapers\Basic 中AndroidManifest.xml的<service>這些,如星系注釋掉如下這些: <service android:label="@string/wallpaper_galaxy" android:name="com.android.wallpaper.galaxy.GalaxyWallpaper" android:permission="android.permission.BIND_WALLPAPER"> <intent-filter> <action android:name="android.service.wallpaper.WallpaperService" /> </intent-filter> <meta-data android:name="android.service.wallpaper" android:resource="@xml/galaxy" /> </srvice> 更改版本號: build/core/Makefile 79行 RK_VER := xxx 更改界面布局 位置:package/app/Launcher2/res/xml/default_workspace.xml 注意:adb shell 里當你點擊任意的一個apk的時候,在後台會輸出 I/ActivityManager( 728): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.estrongs.android.pop/.view.FileExplorerActivity bnds=[294,373][393,478] } I/WindowManager( 728): Setting rotation to 1, animFlags=0 看上面「cmp=com.estrongs.android.pop」的部分就可以找到/前是包名/後面是類名-->這個是在default_workspace.xml裡面需要用到的 launcher:packageName="com.android.browser" launcher:className="com.android.browser.BrowserActivity" 如何將pdf類的文件放到桌面上 將自己製作的pdf幫助文檔放置到桌面上使客人可以直接點擊就瀏覽 String urlString = "/system/app/Nvsbl P4Dv2 English Manual.pdf"; Intent intent = new Intent(); intent.setAction(android.content.Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(urlString)),"application/pdf"); startActivity(intent); finish(); 解釋下: 首先將pdf文檔放到out/target/proct/sdkDemo/system/app下 將固定地址給出urlString,使用Intent intent.setAction(android.content.Intent.ACTION_VIEW);啟動View intent.setDataAndType(Uri.fromFile(new File(urlString)),"application/pdf"); application/pdf可以指定別的格式包括音頻,視頻,圖片等等但是沒有試過有需要可以試試 注意:這個方法很不到如果只放置一些圖片還可以但是如果放置文件比較大那麼打包出來的 system.img文件會很大也就是佔用本身的系統內存----->所以不推薦使用 發現PIN解鎖界面出現5秒之後就會自動進入睡眠,之後將無法再次解鎖。目前解決方法: 修改文件 frameworks\policies\base\phone\com\android\internal\policy\impl\KeyguardViewMediator.java 將如下這行: protected static final int AWAKE_INTERVAL_DEFAULT_MS = 5000; 修改為: protected static final int AWAKE_INTERVAL_DEFAULT_MS = 1000 * 60 * 5;