电话锁定时全局监听硬件按键按下情况

时间:2018-10-30 18:45:13

标签: android listener volume accessibilityservice

有很多相关信息,但是我正在努力找到针对此特定问题的明确答案。

我想开发一个始终在听硬件音量按钮的应用程序。它不需要更改音量,只需要知道何时按下音量按钮即可,无论手机处于什么状态(锁定,解锁,应用程序处于焦点状态,应用程序未处于焦点状态),都需要执行此操作。

到目前为止,我只能找到重点关注该应用程序的方法。代码在这里:

import android.content.Context;
import android.media.AudioManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    String message = "This is a text box.";
    int count = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView textView = findViewById(R.id.textView);
        textView.setText(message);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){
            message += "Volume pressed " + count + "\n";
            TextView textView = findViewById(R.id.textView);
            textView.setText(message);
            count += 1;
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

}

可能的解决方案A

我见过有人建议您可以通过忽略音量的变化来使应用程序失去重点,但这是不够的。如果用户按下up-down-up,则音量变化为0。此外,按下down-up-down也将得出0,这意味着我无法区分这两种模式。我需要记录确切的模式。

可能的解决方案B

我看到Android应用商店中Jawomo的应用BxActions通过某种方式使用了辅助功能。我还想避免使用无障碍服务,因为我的应用程序并非旨在为残障人士提供帮助(我仍然很想知道是否有使用此功能的解决方案,但并不能解决我的最终目标)。

可能的解决方案C

我看到一种“始终”监听音量的方法是让应用播放媒体(一个沉默文件,因为它不是音频播放应用),但这会中断用户播放音乐,并增加了我真正不需要的开销。因此有可能,但最好避免这种方法。出于同样的思路,我不想使用“媒体会话”,因为它会干扰使用其他音频的用户。

最佳结果

目前,我的目标是制作一个简单的应用程序,该应用程序在发生这些事件时将其写入文本日志。如果我能解决这个问题,我可以使我更大的想法变为现实。

我是否忽略了某些事情,或者对此我不了解,还是如果不使用前面提到的潜在解决方案之一就不可能做到?

0 个答案:

没有答案