请教高手,最近在调一个FM的activity,现在的想法是在此activity中的任何画面下,如果按音量侧键KEYCODE_VOLUME_UP和KEYCODE_VOLUME_DOWN时,都可以使得FM的音量发生改变。
但问题是,只有在主界面中得到了如期的效果,要是我按了“MENU”键或是跳转到FM中的其他界面下,再按音量键的话,就会导致调节的是系统的铃声音量而不是FM的音量了。实在是苦恼,试过了不少方法,网上的一些资料说按键事件只会传递给最顶层的view,那这个问题怎么处理呢?
请赐教,最好能给出比较关键的示例代码,谢谢!
但问题是,只有在主界面中得到了如期的效果,要是我按了“MENU”键或是跳转到FM中的其他界面下,再按音量键的话,就会导致调节的是系统的铃声音量而不是FM的音量了。实在是苦恼,试过了不少方法,网上的一些资料说按键事件只会传递给最顶层的view,那这个问题怎么处理呢?
请赐教,最好能给出比较关键的示例代码,谢谢!
解决方案 »
- (急)关于android中sqlite3 模糊查询问题,懂数据库的大牛们快来啊
- 初学者求问
- 求一个等待对话框loading 具体说明前看内容
- Android 图片显示问题,要求图片按原比例显示
- android流量监控 求助
- 关于android分辨率和滚动条
- 如何读取Notification发送的通知内容
- 运行模拟器到最后卡死,这是怎么回事?
- 请教SDK Manager 下的各版本的api下的ARM EABI v7a System Image 和google apis 都没有显示
- android studio编程不知道错哪里了,求助!
- 网上这段 获取Android ip地址的代码 没注释 看不懂 谁能给我解释下?谢谢
- 做音乐播放器的时候出现Unable to resync. Signalling end of stream
public void onWindowFocusChanged(boolean hasFocus);当主窗口非焦点时, 系统会调用onWindowFocusChanged(false)
再回来时,调用onWindowFocusChanged(true)你在activity中override一个看一下:@Override
public void onWindowFocusChanged(boolean hasFocus) {
setVolumeControlStream(AudioManager.STREAM_MUSIC);
super.onWindowFocusChanged(hasFocus);
}
其实只要能够在onCreateOptionsMenu(Menu)或是跳转到FM的其它界面时能够截获到dispatchKeyEvent的音量侧键KEYCODE_VOLUME_UP和KEYCODE_VOLUME_DOWN就有办法修改FM的volume了。
问题是现在从log来看,无论是用onKeyDown还是dispatchKeyEvent根本就进不到这两个被重写的函数里。难道android的机制会存在这么大的缺失吗?应该不会吧
import android.media.AudioManager;
默认的streamtype是这些:
public static final int STREAM_VOICE_CALL = 0;
/* The audio stream for system sounds */
public static final int STREAM_SYSTEM = 1;
/* The audio stream for the phone ring and message alerts */
public static final int STREAM_RING = 2;
/* The audio stream for music playback */
public static final int STREAM_MUSIC = 3;
/* The audio stream for alarms */
public static final int STREAM_ALARM = 4;
/* The audio stream for notifications */
public static final int STREAM_NOTIFICATION = 5;
/* @hide The audio stream for phone calls when connected on bluetooth */
public static final int STREAM_BLUETOOTH_SCO = 6;
一般第三方,自己写的音频播放程序,99.9% 都用的是STREAM_MUSIC
keyVolumeUp/Down
以及 home/menu等, 你重载不了的,windowsManager那边直接截获处理掉了,压根就不再往下分发了,不要再在这块浪费精力了, 这是系统一致性的考量,人家不想让你用户去绑架这几个按键,造成系统操作习惯及处理流程等的问题。
你只要退出这个Activity时,设置
setVolumeControlStream(USE_DEFAULT_STREAM_TYPE)
应该不会对系统造成任何影响