java – 当Android手机处于深度睡眠模式时,抓住按键

问题描述

我正在尝试编写一个应用程序,该应用程序将捕获音量调高/降低,并且蓝牙耳机按钮按下应用程序时

>背景
>前景
>背景和手机处于睡眠模式(按下电源按钮)
>前台和手机处于睡眠模式(按下电源按钮)

对于前两点,我已经写了一些测试应用程序,一切都在我的情况下工作,我将应用程序发送到后台,并向上/向下按音量,我的应用程序捕获这个事件.
按下电源按钮后,手机进入睡眠模式.然后我按音量向上/向下按钮手机不反应那个事件,我看不到任何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);
    }
}

解决方法

看看 registerMediaButtonEventReceiver().你必须注册你的应用程序作为这些事件的接收者才能够收到他们.

这里有一些更多的链接,你应该看看:

> http://android-developers.blogspot.se/2010/06/allowing-applications-to-play-nicer.html
> http://developer.android.com/training/managing-audio/volume-playback.html

以上是来客网为你收集整理的java – 当Android手机处于深度睡眠模式时,抓住按键全部内容,希望文章能够帮你解决java – 当Android手机处于深度睡眠模式时,抓住按键所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。