我正在尝试编写一个应用程序,该应用程序将捕获音量调高/降低,并且蓝牙耳机按钮按下应用程序时
>背景
>前景
>背景和手机处于睡眠模式(按下电源按钮)
>前台和手机处于睡眠模式(按下电源按钮)
对于前两点,我已经写了一些测试应用程序,一切都在我的情况下工作,我将应用程序发送到后台,并向上/向下按音量,我的应用程序捕获这个事件.
按下电源按钮后,手机进入睡眠模式.然后我按音量向上/向下按钮手机不反应那个事件,我看不到任何loge在logcat,像一切都停止工作.
在睡眠模式下检测按键的应用程序.
我认为这个问题无法解决,但是我记得当音乐播放时,当你按音量增大/减小按钮时,Android标准的Media Player会捕捉这个事件.我认为这个应用程序可以做到这一点,因为它是系统应用程序,但后来我下载Winpm播放器,它的工作方式相同.当手机处于睡眠模式时,Winapm可以捕获音量增大/减少的事件.音乐播放器应用程序可以做到这一点.
题
我想了解如何做到这一点?我可以如何编写一个简单的应用程序,它可以抓住音量的上/下按钮.那时我需要播放一些音乐,还是可以做到这一点?我的意思可能是Winamp和其他应用程序捕获这个事件的主要原因是音乐在那个时候播放.或者也许这个问题无法解决,如果不能解决,我想知道为什么?我需要一些论点,为什么它不能解决.
源代码
我已经测试了一些应用程序,这里是结果,我写了一个简单的应用程序,可以在背景和前景以及应用程序处于睡眠模式时捕获音量上下键.当应用程序在后台和场地中时,一切都可以完美运行,我的测试应用程序会捕获事件,但是当我按下电源按钮时,它会停止这样做,然后按下媒体播放器上的开始,并开始播放一些音乐,然后按下电源按钮再次按音量调高,doun和我的应用程序统计查找音量上下按键.这意味着随后的音乐播放我的应用程序可以捕捉那些事件,所以我的下一个问题我如何模拟像我的手机播放somem音乐?这可能是解决方案吗?
的Manifest.xml
<receiver android:name="com.vito.backgroundworker.VolumeBroadcast" android:enabled="true"> <intent-filter> <action android:name="android.media.VOLUME_CHANGED_ACTION" /> </intent-filter> </receiver> <receiver android:name="RemoteControlReceiver"> <intent-filter> <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiver>
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); } }
解决方法
这里有一些更多的链接,你应该看看:
> http://android-developers.blogspot.se/2010/06/allowing-applications-to-play-nicer.html
> http://developer.android.com/training/managing-audio/volume-playback.html