Android 去掉系统默认提示音、移除音量调节的进度条、增加音量调节提示音

来自:皮囊至简

1、Android 去掉系统默认提示音。

android 系统默认的提示音指的就是系统设置中,声音里面的默认通知铃声。当系统有消息提醒,比如 wifi 打开扫描结果刷新出来时就会播放这个声音。如果想去除这个声音,可以采用如下方式:

build/target/product/core_base.mk
build/target/product/full_base.mk

在这两个文件中的ro.config.notification_sound这个属性的值就是系统提示音的声音,如果不想要时可以配成一个不存在声音就可以。

比如ro.config.notification_sound=null.ogg。
这样做肯定是没有声音了,但是当用户手动在设置-->声音-->系统提示音 下设置声音的恶化还是会响的,所以如果想做的彻底还需要屏蔽掉设置中的这个入口,比较简单。

2、移除音量调节的进度条

系统默认在按音量键调节音量时会在屏幕的上方弹出一个显示音量条的dialog,如果项目中不想显示这个提示信息的话。可以采用如下方式去掉这个。

首先音量调节的进度条是通过VolumeDialog中的相关方法显示出来的,所以想要禁止显示,就需要在这个类中对应的方法下做修改。具体为,在showH方法中根据自己需要的判断条件,直接return就可以不显示出来。当让除此方法之外,你也可以通过在合适的实际调用dismissH方法dismiss掉dialog的显示。除此之外可能也有更好的方法,只是笔者暂时还未发现。以上方法都是经过实践验证的。

private void showH(int reason) {
        //if(true) return;
        if (D.BUG) Log.d(TAG, "showH r=" + Events.DISMISS_REASONS[reason]);
        mHandler.removeMessages(H.SHOW);
        mHandler.removeMessages(H.DISMISS);
        rescheduleTimeoutH();
        if (mShowing) return;
        mShowing = true;
        mMotion.startShow();
        Events.writeEvent(mContext, Events.EVENT_SHOW_DIALOG, reason, mKeyguard.isKeyguardLocked());
        mController.notifyVisible(true);
    }

3、增加音量调节提示音

在N上默认调节音量时每按一次键,系统并不会有相应的提示音,要想实现这个需要自己加上。具体做法是
frameworks-base / services/core/java/com/android/server/audio/AudioService.java 中进行处理的,音量的按键调节代码会在这里面进行处理。
在此类的如下方法中加入修改

private void adjustStreamVolume(int streamType, int direction, int flags,
            String callingPackage, String caller, int uid)
 
{
        ......
     //可以定义一个mediaplayer来播放,也可以使用 Ringtone & RingtoneManager来播放,都是可以的
   mPlayer.setDataSource("/system/media/VolumePrompt.ogg");
}

如上,每次调节音量时都会播放对应的声音。

除此之外若只想在最大和最小音量时做一些事情,也可以在这里面进行处理。
在此方法中有一个index,它代表的是目标音量的值,所以只需要对他进行判断就可以达到需求的目的。

这里的最大值和最小值是通过MAX_STREAM_VOLUME和MIN_STREAM_VOLUME数组中对应的声音类型来进行计算的,最小值不用说,一般都是0打电话的除外,当让你有需要的话也可以修改,最大值是150,也是可以修改的。代码如下

  mIndexMin = MIN_STREAM_VOLUME[streamType] * 10;
   mIndexMax = MAX_STREAM_VOLUME[streamType] * 10;
MAX_STREAM_VOLUME MIN_STREAM_VOLUME 各种声音类型的定义如下

 private static int[] MAX_STREAM_VOLUME = new int[] {
        7,  // STREAM_VOICE_CALL
        15,  // STREAM_SYSTEM
        15,  // STREAM_RING
        15// STREAM_MUSIC
        15,  // STREAM_ALARM
        15,  // STREAM_NOTIFICATION
        15// STREAM_BLUETOOTH_SCO
        15,  // STREAM_SYSTEM_ENFORCED
        15// STREAM_DTMF
        15  // STREAM_TTS
    };

    /** Minimum volume index values for audio streams */
    private static int[] MIN_STREAM_VOLUME = new int[] {
        1,  // STREAM_VOICE_CALL
        0,  // STREAM_SYSTEM
        0,  // STREAM_RING
        0,  // STREAM_MUSIC
        0,  // STREAM_ALARM
        0,  // STREAM_NOTIFICATION
        0,  // STREAM_BLUETOOTH_SCO
        0,  // STREAM_SYSTEM_ENFORCED
        0,  // STREAM_DTMF
        0   // STREAM_TTS
    };
推荐↓↓↓
安卓开发
上一篇:Android 全面屏启动页适配的一些坑 下一篇:Android开发之自定义相机、相册趟坑之旅