帮朋友做的在按音量键时,触发.
参考:http://developer.android.com/training/managing-audio/volume-playback.html
关于 在activiy中监听的话,很多资料都有了. 直接onKeyDown就行.
看效果图:
一: 使用广播监听.
首先设置action, 可以在文件里声明,也可以在代码里声明,这里使用代码声明,如下:
IntentFilter filter = new IntentFilter("android.media.VOLUME_CHANGED_ACTION");
this.registerReceiver(mReceiver, filter);
网上看到很多用这个action的,
android.intent.action.MEDIA_BUTTON
等有空了再看看.
实现mReceiver
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(action.equals("android.media.VOLUME_CHANGED_ACTION")){
int volume = (Integer)intent.getExtras().get("android.media.EXTRA_VOLUME_STREAM_VALUE");
tv.setText( "当前音量(volume): "+volume);
if(volume>MainActivity.this.volume){
}else if(volume == MainActivity.this.volume){
}else if(volume < MainActivity.this.volume){
}
MainActivity.this.volume = volume;
}
}
};
这个就是广播的实现了,往深入的就自己研究研究吧.
二: 服务的监听.
1 在xml里声明<service android:name="com.example.testvolums.MyService"></service>
2 在activity里启动服务 this.startService(new Intent(this,MyService.class));
3 在Service里的onCreate()中
MyContentObserver mContentObserver = new MyContentObserver(this,new Handler());
getApplicationContext().getContentResolver().registerContentObserver(android.provider.Settings.System.CONTENT_URI, true, mContentObserver );
4 MyContentObserver.java
private class MyContentObserver extends ContentObserver{
public MyContentObserver(Handler handler) {
super(handler);
}
public MyContentObserver(Context c, Handler handler) {
super(handler);
System.out.println("MyContentObserver MyContentObserver(Context c, Handler handler)");
context=c;
AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
volume = audio.getStreamVolume(AudioManager.STREAM_MUSIC);
}
@Override
public boolean deliverSelfNotifications() {
System.out.println("MyContentObserver deliverSelfNotifications()");
return super.deliverSelfNotifications();
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
System.out.println("MyContentObserver onChange(boolean selfChange): "+selfChange);
AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int curVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC);
System.out.println("curVolume: "+curVolume);
System.out.println("volume: "+volume);
}
看效果:
当然黑屏了就监听不到了, 怎么在黑屏的时候处理是唤醒还是怎么的, 不研究了.
随便写的,写的不对,多见谅.
本文介绍了如何在Android应用中通过Service和BroadcastReceiver监听音量变化。首先,通过注册BroadcastReceiver并监听"android.media.VOLUME_CHANGED_ACTION"来接收音量改变的广播。其次,在Service中创建ContentObserver,监听系统设置的变化,获取AudioManager的音乐流音量。当音量发生变化时,更新UI展示当前音量。
6072

被折叠的 条评论
为什么被折叠?



