Android 5の修正方法1システムボリュームサイズ

7587 ワード

本文はAndroid 5に基づく.1のコード
カスタマイズの必要性をするときは、システム通知の音を修正し、無効にし、サードパーティアプリケーションが通知を送信するのを避けるときは、音が大きく、ユーザーを驚かせます.いっそ通知音を消す.次に、音声を閉じるいくつかの方法と、システムのデフォルトの音声を変更する方法について説明します.
1.システムレイヤの既定のサウンドサイズを直接変更する
システムコードframeworks/base/media/java/android/media/AudioService.javaの先頭には2つの配列が定義されており、1つのMAX_STREAM_VOLUMEには各種音声の最大値(最大値は100ではないので、各音量の最大値を取得するにはAudioManager.getStreamMaxVolume(type)が必要)が定義され、設定されている.
配列DEFAULT_STREAM_VOLUMEも定義されており、MAX_STREAM_VOLUMEで定義されている順序と同様に、様々な音のデフォルトの大きさが示されています.このブロックコードは次のとおりです./** @hide Maximum volume index values for audio streams */ private static int[] MAX_STREAM_VOLUME = new int[] { 5, // STREAM_VOICE_CALL 7, // STREAM_SYSTEMX_STREAM_VOLUMEMAX_STREAM_VOLUMEMAX_STREAM_VOLUME 7, // STREAM_RING 15, // STREAM_MUSIC 7, // STREAM_ALARM 7, // STREAM_NOTIFICATION 15, // STREAM_BLUETOOTH_SCO 7, // STREAM_SYSTEM_ENFORCED 15, // STREAM_DTMF 15 // STREAM_TTS }; private static int[] DEFAULT_STREAM_VOLUME = new int[] { 4, // STREAM_VOICE_CALL 7, // STREAM_SYSTEM 5, // STREAM_RING 11, // STREAM_MUSIC 6, // STREAM_ALARM 5, // STREAM_NOTIFICATION 7, // STREAM_BLUETOOTH_SCO 7, // STREAM_SYSTEM_ENFORCED 11, // STREAM_DTMF 11 // STREAM_TTS }; private static int[] MAX_STREAM_VOLUME = new int[] {
5, //STREAM_VOICE_CALL
7, //STREAM_SYSTEMX_STREAM_VOLUMEMAX_STREAM_VOLUMEMAX_STREAM_VOLUME
7, //STREAM_RING
15,//STREAM_MUSIC
7, //STREAM_ALARM
7, //STREAM_NOTIFICATION
15,//STREAM_BLUETOOTH_SCO
7, //STREAM_SYSTEM_ENFORCED
15,//STREAM_DTMF
15 //STREAM_TTS
};
private static int[] DEFAULT_STREAM_VOLUME = new int[] {
4, //STREAM_VOICE_CALL
7, //STREAM_SYSTEM
5, //STREAM_RING
11,//STREAM_MUSIC
6, //STREAM_ALARM
5, //STREAM_NOTIFICATION
7, //STREAM_BLUETOOTH_SCO
7, //STREAM_SYSTEM_ENFORCED
11,//STREAM_DTMF
11 //STREAM_TTS
};
デフォルトの通知音を変更する必要がある場合は、STREAM_NOTIFICATIONの前の数値5を0にすると、デフォルトの音は0になります.
2.データベース内の通知音の値の変更
メディア音声これらのデータはデータベースにデフォルトで格納されており、ほとんどのデータはシステムが初めて起動したときにSettingProviderアプリケーションに初期化された値をロードしていることを知っています.もちろん、通知された音声も含まれています.
具体的なコードframeworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.javaのうち、loadVolumeLevels(db)の方法があります.この方法は、デフォルトの音声サイズをすべてロードする場所です.具体的なコードは以下の通りです.stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" + " VALUES(?,?);"); loadSetting(stmt, Settings.System.VOLUME_MUSIC, AudioService.getDefaultStreamVolume(AudioManager.STREAM_MUSIC)); loadSetting(stmt, Settings.System.VOLUME_RING, AudioService.getDefaultStreamVolume(AudioManager.STREAM_RING)); loadSetting(stmt, Settings.System.VOLUME_SYSTEM, AudioService.getDefaultStreamVolume(AudioManager.STREAM_SYSTEM)); loadSetting(stmt,Settings.System.VOLUME_VOICE, AudioService.getDefaultStreamVolume(AudioManager.STREAM_VOICE_CALL)); loadSetting(stmt, Settings.System.VOLUME_ALARM, AudioService.getDefaultStreamVolume(AudioManager.STREAM_ALARM)); loadSetting(stmt,Settings.System.VOLUME_NOTIFICATION, AudioService.getDefaultStreamVolume(AudioManager.STREAM_NOTIFICATION)); loadSetting(stmt,Settings.System.VOLUME_BLUETOOTH_SCO, AudioService.getDefaultStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO)); INSERT OR IGNORE INTO system(name,value)"+ "VALUES(?,?);");
loadSetting(stmt, Settings.System.VOLUME_MUSIC, AudioService.getDefaultStreamVolume(AudioManager.STREAM_MUSIC));
loadSetting(stmt, Settings.System.VOLUME_RING, AudioService.getDefaultStreamVolume(AudioManager.STREAM_RING));
loadSetting(stmt, Settings.System.VOLUME_SYSTEM, AudioService.getDefaultStreamVolume(AudioManager.STREAM_SYSTEM));
loadSetting(stmt,Settings.System.VOLUME_VOICE,
AudioService.getDefaultStreamVolume(AudioManager.STREAM_VOICE_CALL));
loadSetting(stmt, Settings.System.VOLUME_ALARM, AudioService.getDefaultStreamVolume(AudioManager.STREAM_ALARM));
loadSetting(stmt,Settings.System.VOLUME_NOTIFICATION,
AudioService.getDefaultStreamVolume(AudioManager.STREAM_NOTIFICATION));
loadSetting(stmt,Settings.System.VOLUME_BLUETOOTH_SCO,
AudioService.getDefaultStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO));
loadSettingsでは、すべての音に関するデフォルト値のサイズがデータベースに書き込まれていることがわかりました.ここから始めることができます.Settings.System.VOLUME_NOTIFICATIONの設定項目では、彼を0に設定すると、システムがデフォルトの音を0に通知します.AudioService.getDefaultStreamVolumeという方法の実現を見てみましょう.public static int getDefaultStreamVolume(int streamType) { return DEFAULT_STREAM_VOLUME[streamType]; } static int getDefaultStreamVolume(int streamType) {
return DEFAULT_STREAM_VOLUME[streamType];
}
実際には,シナリオ1でシステム内のデフォルトボリュームサイズ配列の値を返した.シナリオ1とシナリオ2は実際には効果的です
3.ro.を修正するconfig.notification_soundの属性値
この属性値は、デフォルトの音楽ファイルファイル名を通知することを意味し、システムコードbuild/target/product/full_base.mkで定義されています.音声が出たくない場合は、デフォルト値を存在しないファイルに変更することができます.通知音声は再生されません.もちろん、お客様定義のmkでPRODUCT_PROPERTY_OVERRIDESを使用してこの属性を複写することもできます.ファイルが存在しないか空に指定すると、通知音が鳴りません.
4.デフォルトのサウンドの変更
システムは多くの音をデフォルトしています.では、いくつかのシステムのデフォルトの音響ファイルを変更します.では、frameworks/base/data/soundsの下のファイルとフォルダの音声ファイルを変更することができます.名前を変更したら、mkで元の名前を新しい名前に置き換えることを覚えています.この下のmkの役割は、これらの音楽ファイルをすべてシステムsystem/media/audioの下の各モジュールのファイルにパッケージ化し、システムが起動したときに、これらのファイルをスキャンしてデータベースに追加し、その後、設定中に音声を交換すると、直接データベースからこれらの音楽ファイルを検索し、ユーザーが選択することである.