我的应用程序中有一个服务在后端运行,当我按下按钮音量时服务可以启动,当我按下按钮音量时停止服务。
public class SettingsContentObserver extends ContentObserver {
int previousVolume;
Context context;
public SettingsContentObserver(Context c, Handler handler) {
super(handler);
context=c;
AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
previousVolume = audio.getStreamVolume(AudioManager.STREAM_RING);
}
@Override
public boolean deliverSelfNotifications() {
return super.deliverSelfNotifications();
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int currentVolume = audio.getStreamVolume(AudioManager.STREAM_RING);
int delta=previousVolume-currentVolume;
if(delta > 0)
{
System.out.println("Decreased") ;
Intent intent = new Intent(context, MyAlarmService.class);
context.stopService(intent);
previousVolume=currentVolume;
}
else if(delta < 0)
{
System.out.println("Increased");
Intent intent = new Intent(context, MyAlarmService.class);
context.startService(intent);
previousVolume=currentVolume;
}
}
}
当我的手机被锁定时(屏幕关闭时)我想做同样的事情,当我在网上搜索时,我发现我必须使用BroadcastReceivre,我测试它但它不起作用。
public class YourBoardcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("get something", "i dont know what!!");
String intentAction = intent.getAction();
KeyEvent event = null;
if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
event = (KeyEvent) intent
.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
}
if (event == null) {
return;
}
int keycode = event.getKeyCode();
int action = event.getAction();
long eventtime = event.getEventTime();
if (keycode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE
|| keycode == KeyEvent.KEYCODE_HEADSETHOOK) {
if (action == KeyEvent.ACTION_DOWN) {
Intent intent1 = new Intent(context, MyAlarmService.class);
context.stopService(intent1);
if (isOrderedBroadcast()) {
abortBroadcast();
}
else if (action == KeyEvent.ACTION_UP) {
Intent intent11 = new Intent(context, MyAlarmService.class);
context.startService(intent11);
}
if (isOrderedBroadcast()) {
abortBroadcast();
}
}
}
}
}
在android清单中我添加:
<receiver android:name="YourBoardcastReceiver">
<intent-filter>
<action android:name="android.intent.action.SCREEN_ON" />
</intent-filter>
</receiver>
在关于方法oncrete的mainActivity中我添加:
AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
ComponentName mRemoteControlResponder = new ComponentName(getPackageName(),
YourBoardcastReceiver.class.getName());
请求我可以给我一些帮助, 认为
答案 0 :(得分:5)
当手机处于锁定/睡眠模式时我们无法听到按钮的变化,但是我们可以做一些黑客来听音量按钮。
Github:https://github.com/praslnx8/volume_Screen_Lock
这些应用程序正在播放背景为0卷的媒体,然后通过MediaButtonIntent
将始终使用Reciever收听密钥答案 1 :(得分:0)
尝试注册BroadCast Receiver for Intent.ACTION_SCREEN_OFF和Intent.ACTION_SCREEN_ON