有没有一种方法可以加快内容观察者的反馈?

时间:2018-11-07 18:39:06

标签: android contentobserver

我正在尝试制作一个可检测何时全局按下音量按钮的应用程序。我不需要更改音量,我只想知道何时更改。我已经可以做到这一点,问题是我不能以足够的时间精度做到这一点。

当前,如果我按下按钮的速度过快(例如1秒钟之内),例如上下,那么它只会检测到一半的按下。如果我在两次按下之间进行了短暂(半秒钟)的暂停,那么它将检测到每个单独的按钮按下都很好。

问题是我不希望用户必须学会在按钮按下之间等待键入正确的图案。

这是我的服务代码:

public class VolumeService extends Service {

private AudioManager mAudioManager;
private Handler mHandler = null;
private SettingsObserver mVolumeObserver;
private final IBinder mIBinder = new LocalBinder();

class SettingsObserver extends ContentObserver {

    Context context;
    int currentVolume;

    SettingsObserver(Context c, Handler handler) {

        super(handler);
        context = c;
        mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
        currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);

        int volumeChange = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC) - currentVolume;
        currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        int volumeCode = -1;

        if (volumeChange < 0) {
            volumeCode = 0;
        } else if (volumeChange > 0) {
            volumeCode = 1;
        }
        MainActivity.getInstance().updatePattern(volumeCode);

    }
}

@Override
public void onCreate() {

    super.onCreate();

    mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
    mVolumeObserver = new SettingsObserver(this, new Handler());
    getApplicationContext().getContentResolver().registerContentObserver(Settings.System.CONTENT_URI, true, mVolumeObserver);

}

主要活动只是获取一个包含内容观察者注册的按钮按下的数组,并将其打印出来。

  • 有什么办法可以提高“采样频率”,以我的内容查看器来说,它可以单独检测音量按键吗? (如果我在主要活动中使用onKeyDown(),则速度问题就不存在了,但这违反了全局监听的目的)。
  • 这仅仅是内容查看器的限制,还是我出了点问题?
  • 还有其他可以实现相同目标的东西吗?

0 个答案:

没有答案