安卓修改默认音量
本文所在的平臺是安卓10
1.修改主要的文件AudioService.java
首先大家可以在安卓源碼/framework?里面搜一下。本平臺的路徑是:
/frameworks/base/services/core/java/com/android/server/audio/AudioService.java
我之前參考過一些舊的安卓源碼,可能不在這個(gè)目錄下,如果發(fā)現(xiàn)與本路徑不同,自行搜索一下這個(gè)文件。如find命令或者grep一下下面代碼的關(guān)鍵詞。
關(guān)鍵代碼:
int maxMusicVolume = SystemProperties.getInt("ro.config.media_vol_steps", -1); //獲取media的最大值if (maxMusicVolume != -1) {MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = maxMusicVolume;}int defaultMusicVolume = SystemProperties.getInt("ro.config.media_vol_default", -1); //獲取medio的默認(rèn)值if (defaultMusicVolume != -1 &&defaultMusicVolume <= MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] &&defaultMusicVolume >= MIN_STREAM_VOLUME[AudioSystem.STREAM_MUSIC]) {AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = defaultMusicVolume;} else {if (isPlatformTelevision()) {AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] =MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] / 4;} else {AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] =MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] / 3;}}代碼主要獲取兩個(gè)安卓的配置:
1.ro.config.media_vol_steps? ???//音量最大值
2.ro.config.media_vol_default? //開機(jī)時(shí),音量默認(rèn)值
如果在安卓的配置文件沒有正確的獲取參數(shù),則會預(yù)設(shè)默認(rèn)值。
那么,我們最簡單的方法就是在代碼直接寫值:
// int maxMusicVolume = SystemProperties.getInt("ro.config.media_vol_steps", -1);// Log.e(TAG,"oncethings media_vol_steps :"+maxMusicVolume);// if (maxMusicVolume != -1) {// MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = maxMusicVolume;// }// int defaultMusicVolume = SystemProperties.getInt("ro.config.media_vol_default", -1);// Log.e(TAG,"oncethings media_vol_default :"+defaultMusicVolume);// if (defaultMusicVolume != -1 &&// defaultMusicVolume <= MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] &&// defaultMusicVolume >= MIN_STREAM_VOLUME[AudioSystem.STREAM_MUSIC]) {// AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = defaultMusicVolume;// } else {// if (isPlatformTelevision()) {// AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] =// MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] / 4;// } else {// AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] =// MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] / 3;// }// }//直接賦值MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = 15;AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = 0;但這樣,在后期的維護(hù)是不方便的,而且也改變了安卓原本的框架。所以我們最好的方法就設(shè)置對應(yīng)值:
ro.config.media_vol_steps和ro.config.media_vol_default。
?
2.修改安卓的默認(rèn)配置prop
配置安卓prop大體上有幾個(gè)地方可以配置:
1.buildinfo.sh? ? 本平臺路徑:/build/tools/buildinfo.sh?
修改方法:增加一行? echo "ro.config.media_vol_default=5"? ?,參照其他怎么寫,學(xué)會照貓畫虎。
2.system.prop?本平臺路徑:/device/xxx/xxx/system.prop?因?yàn)橐C?#xff0c;可以用find命令尋找
修改方法:ro.config.media_vol_default=5 ,同理參照這個(gè)文件的其他。
上面兩個(gè)路徑都可以配置安卓的默認(rèn)配置。可是下面system.prop配置的會覆蓋buildinfo.sh。
如果說buildinfo.sh配置音量為5,system.prop配置音量為10。那么結(jié)果就為10。
ps:上面說的兩個(gè)路徑,是作者本平臺的發(fā)現(xiàn)的路徑,也許其他版本的配置文件不在這里。可以再/out/目錄下面搜索ro.config.media_vol_default這個(gè)配置,基本上可以定位源碼哪里文件。比如,本人在配置buildinfo.sh音量為5后,獲取的值還是原本的15,在grep?out文件后,發(fā)現(xiàn)有個(gè)文件配置是ro.config.media_vol_default=15。那么既可以發(fā)現(xiàn)自己配置對不對,也可以定位具體的文件。
?
3.修改linux配置的權(quán)限(selinux策略)
大部分,修改完prop后,就可以完成修改默認(rèn)音量了。但是有些會獲取失敗,可能要增加linux的策略。
本平臺路徑:/system/sepolicy/public/property.context
修改方法:
ro.config.alarm_alert u:object_r:exported2_config_prop:s0 exact string ro.config.media_vol_steps u:object_r:exported2_config_prop:s0 exact int ro.config.alarm_vol_steps u:object_r:exported2_config_prop:s0 exact int ro.config.system_vol_steps u:object_r:exported2_config_prop:s0 exact int ro.config.notification_sound u:object_r:exported2_config_prop:s0 exact string ro.config.ringtone u:object_r:exported2_config_prop:s0 exact string ro.config.media_vol_default u:object_r:exported2_config_prop:s0 exact int ro.config.alarm_vol_default u:object_r:exported2_config_prop:s0 exact int ro.config.system_vol_default u:object_r:exported2_config_prop:s0 exact intps:記得看獲取后的格式,修改音量就是int類型。如何看是否成功獲取:在源碼那里增加Log.i打印即可,開機(jī)后用andriodstdio看就行了。
?
4.?其他可能有用的信息
/frameworks/base/services/core/java/com/android/server/audio/AudioService.java:
public static final int[] DEFAULT_STREAM_VOLUME = new int[] {4, // STREAM_VOICE_CALL7, // STREAM_SYSTEM4, // STREAM_RING8, // STREAM_MUSIC4, // STREAM_ALARM4, // STREAM_NOTIFICATION7, // STREAM_BLUETOOTH_SCO7, // STREAM_SYSTEM_ENFORCED11, // STREAM_DTMF11, // STREAM_TTS4, // STREAM_FM4 // STREAM_MATV};frameworks\base\media\java\android\media\AudioManager.java:
private int[] MAX_STREAM_VOLUME = new int[] {6, // STREAM_VOICE_CALL7, // STREAM_SYSTEM7, // STREAM_RING13, // STREAM_MUSIC7, // STREAM_ALARM7, // STREAM_NOTIFICATION15, // STREAM_BLUETOOTH_SCO7, // STREAM_SYSTEM_ENFORCED15, // STREAM_DTMF15, // STREAM_TTS13, //STREAM_FM13 //stream_MATVps:舊版本好像修改這兩個(gè)地方就可以了,這兩個(gè)路徑屬于本平臺,這兩個(gè)結(jié)構(gòu)體如果找不到,grep去找一下。
?
最后,希望可以幫到大家,如果有用的就收藏一下,白嫖的就點(diǎn)個(gè)贊。
?
?
?
?
?
總結(jié)
- 上一篇: itext jsp页面打印
- 下一篇: (IOS)截图Demo