问题描述
我正在尝试编写一个应用程序,该应用程序将捕获音量调高/降低,并且蓝牙耳机按钮按下应用程序时
>背景
>前景
>背景和手机处于睡眠模式(按下电源按钮)
>前台和手机处于睡眠模式(按下电源按钮)
对于前两点,我已经写了一些测试应用程序,一切都在我的情况下工作,我将应用程序发送到后台,并向上/向下按音量,我的应用程序捕获这个事件.
按下电源按钮后,手机进入睡眠模式.然后我按音量向上/向下按钮手机不反应那个事件,我看不到任何loge在logcat,像一切都停止工作.
在睡眠模式下检测按键的应用程序.
我认为这个问题无法解决,但是我记得当音乐播放时,当你按音量增大/减小按钮时,Android标准的Media Player会捕捉这个事件.我认为这个应用程序可以做到这一点,因为它是系统应用程序,但后来我下载Winpm播放器,它的工作方式相同.当手机处于睡眠模式时,Winapm可以捕获音量增大/减少的事件.音乐播放器应用程序可以做到这一点.
题
我想了解如何做到这一点?我可以如何编写一个简单的应用程序,它可以抓住音量的上/下按钮.那时我需要播放一些音乐,还是可以做到这一点?我的意思可能是Winamp和其他应用程序捕获这个事件的主要原因是音乐在那个时候播放.或者也许这个问题无法解决,如果不能解决,我想知道为什么?我需要一些论点,为什么它不能解决.
我已经测试了一些应用程序,这里是结果,我写了一个简单的应用程序,可以在背景和前景以及应用程序处于睡眠模式时捕获音量上下键.当应用程序在后台和场地中时,一切都可以完美运行,我的测试应用程序会捕获事件,但是当我按下电源按钮时,它会停止这样做,然后按下媒体播放器上的开始,并开始播放一些音乐,然后按下电源按钮再次按音量调高,doun和我的应用程序统计查找音量上下按键.这意味着随后的音乐播放我的应用程序可以捕捉那些事件,所以我的下一个问题我如何模拟像我的手机播放somem音乐?这可能是解决方案吗?
的Manifest.xml
MainActivity.java
public class MainActivity extends Activity {
private PowerManager.WakeLock wl;
//private BroadcastReceiver vol = new VolumeBroadcast();
private AudioManager mAudioManager;
private ComponentName mRemoteControlResponder;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK,"DoNjfdhotDimScreen");
mAudioManager = (AudioManager)getSystemService(Context.AUdio_SERVICE);
mRemoteControlResponder = new ComponentName(getPackageName(),RemoteControlReceiver.class.getName());
}
@Override
protected void onPause() {
super.onPause();
mAudioManager.registerMediaButtonEventReceiver(
mRemoteControlResponder);
wl.release();
}//End of onPause
@Override
protected void onResume() {
super.onResume();
wl.acquire();
}//End of onResume
@Override
public void onDestroy() {
super.onDestroy();
mAudioManager.unregisterMediaButtonEventReceiver(
mRemoteControlResponder);
}
}
@H_404_32@