不多说,先上图,先看一张我开发板的截图 。。。


首先我先解释一下: 由于我的开发板硬件没有调节声音的按键,因而只能在图中所示

处调节,但是在静音之后,那个声音调节又不可点击,所以我们要在静音模式下使其可以点击,也就是可以调节声音。经过上个星期的源代码分析以及一系列的测试,最终我发现在settings.xml文件中的
<com.android.settings.RingerVolumePreference
android:key="ring_volume"
android:dependency="silent"
android:title="@string/all_volume_title"
android:summary="@string/ring_volume_summary"
android:dialogTitle="@string/all_volume_title"
android:persistent="false"
android:streamType="ring" />
代表声音可调节,而删除android:dependency="silent这一句则能在静音下点击声音调节。。。
因而就有了下面在静音模式下可调节声音。

那么我们来看看怎样在静音下仍然可以播放媒体声音:
首先我们在packages/app/Setting/src/的soundsettings.java中可以找到点击静音的事件, onPreferenceTreeClick方法if (preference == mSilent) {
if (mSilent.isChecked()) 中的 mAudioManager.setRingerMode(
vibeInSilent ? AudioManager.RINGER_MODE_VIBRATE
: AudioManager.RINGER_MODE_SILENT);
如果点击静音,那么mAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE),跟进setRingerMode方法到AudioManager.java中的setRingerMode方法,再跟到AudioService.java中的setRingerMode方法,里面有 setRingerModeInt(ringerMode, true);再找到setRingerModeInt方法,
int numStreamTypes = AudioSystem.getNumStreamTypes();//获得系统声音类型的种类如电话声音,媒体声音,铃声等
for (int streamType = numStreamTypes - 1; streamType >= 0; streamType--) {
if (isStreamMutedByRingerMode(streamType)) {
if (!isStreamAffectedByRingerMode(streamType) ||
mRingerMode == AudioManager.RINGER_MODE_NORMAL)//正常情况,也就是不静音

{
mStreamStates[streamType].mute(null, false);//应该是让这种声音可以在静音下仍可以有声音
mRingerModeMutedStreams &= ~(1 << streamType);
}
} else {
if (isStreamAffectedByRingerMode(streamType) &&
mRingerMode != AudioManager.RINGER_MODE_NORMAL)//静音住

{
mStreamStates[streamType].mute(null, true);
mRingerModeMutedStreams |= (1 << streamType);

}
}
里面大概功能就是先获得系统里面的声音类型,如电话声音,media声音,铃声等等。。。
那么我们就是要在静音情况下使得media可以有声音。。。
那么我们可以下循环当中找到当静音时的媒体声音,然后设置它。。
在if (isStreamAffectedByRingerMode(streamType) &&
mRingerMode != AudioManager.RINGER_MODE_NORMAL) 下
也就是静音模式下:修改如下:
if(AudioSystem.STREAM_MUSIC==streamType)
{
mStreamStates[streamType].mute(null, false);//应该是让这种声音可以在静音下仍可以有声音
mRingerModeMutedStreams &= ~(1 << streamType);
}
else
{
mStreamStates[streamType].mute(null, true);
mRingerModeMutedStreams |= (1 << streamType);
}
这样好像就达到了我要实现的目的,然后编译Setting,再替换开发板的Settings.apk

编译framework的base,替换开发板system/framework/framework.jar就ok了

,还有重启机器。。。。



更多相关文章

  1. Android(安卓)和iOS 比较之我见
  2. Google 正在悄悄解决 Android(安卓)的碎片化
  3. AVG Mobilation Pro for Android(安卓)手機防毒軟體限時免費下載
  4. Android(安卓)控件大全
  5. android merge和include简单使用
  6. 实现Android播放声音资源的一个简单的工具类
  7. Android中判断是否有声音在播放
  8. 你知道 Android(安卓)的 MessageQueue.IdleHandler 吗?
  9. 关于Android(安卓)API,你所不知道的

随机推荐

  1. .NET中关于接口和类之间的区别介绍
  2. C#中如何监控类属性更改的代码案例分享
  3. HttpPostedFileBase文件上传实例详解
  4. 命名管道跨进程通讯
  5. C#如何使用LibUsbDotNet实现USB通信的示
  6. C#如何使用正则表达式来验证中文字符的案
  7. .net下如何使用Quartz.Net的代码图文教程
  8. 详细介绍Quartz.Net调度框架配置的实例
  9. 如何使用C#来编写的一个完整字谜游戏的示
  10. 如何使用ASP.NET实现生成验证码功能的实