当前位置: 首页 > 知识库问答 >
问题:

手机锁定时收听音量按钮

马欣德
2023-03-14
public class SettingsContentObserver extends ContentObserver {


int previousVolume;
Context context;

public SettingsContentObserver(Context c, Handler handler) {
    super(handler);
    context=c;

    AudioManager audio = (AudioManager)        context.getSystemService(Context.AUDIO_SERVICE);
    previousVolume = audio.getStreamVolume(AudioManager.STREAM_RING);

}



@Override
public boolean deliverSelfNotifications() {
    return super.deliverSelfNotifications();
}

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

    AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    int currentVolume = audio.getStreamVolume(AudioManager.STREAM_RING);

    int delta=previousVolume-currentVolume;



        if(delta > 0)
        {
            System.out.println("Decreased") ;
            Intent intent = new Intent(context, MyAlarmService.class);
            context.stopService(intent);
            previousVolume=currentVolume;
        }
        else if(delta < 0)
        {
              System.out.println("Increased");
              Intent intent = new Intent(context, MyAlarmService.class);
              context.startService(intent);
              previousVolume=currentVolume;
        }


}
}
public class YourBoardcastReceiver extends BroadcastReceiver {
    @Override
public void onReceive(Context context, Intent intent) {


    Log.e("get something", "i dont know what!!");

    String intentAction = intent.getAction();
    KeyEvent event = null;
    if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
        event = (KeyEvent) intent
            .getParcelableExtra(Intent.EXTRA_KEY_EVENT);
    }

    if (event == null) {
        return;
    }

    int keycode = event.getKeyCode();
    int action = event.getAction();
    long eventtime = event.getEventTime();

    if (keycode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE
        || keycode == KeyEvent.KEYCODE_HEADSETHOOK) {
    if (action == KeyEvent.ACTION_DOWN) {

            Intent intent1 = new Intent(context, MyAlarmService.class);
            context.stopService(intent1);

        if (isOrderedBroadcast()) {
            abortBroadcast();
        }

        else if (action == KeyEvent.ACTION_UP) {

              Intent intent11 = new Intent(context, MyAlarmService.class);
              context.startService(intent11);

        }

            if (isOrderedBroadcast()) {
                abortBroadcast();


    }
}
}
}


}
<receiver android:name="YourBoardcastReceiver">
            <intent-filter>
                    <action android:name="android.intent.action.SCREEN_ON" />
            </intent-filter>
    </receiver>

在关于克里特岛方法的主要活动中,我补充说:

AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
ComponentName mRemoteControlResponder = new ComponentName(getPackageName(),
YourBoardcastReceiver.class.getName());

恳求我能给我一些帮助,想。

共有1个答案

羊舌自强
2023-03-14

当手机被锁定/睡眠模式,我们不能听按钮的变化,但我们可以做一些黑客听音量按钮。

GitHub:https://github.com/praslnx8/volume_screen_lock

这些应用程序在后台播放0音量的媒体,然后键将始终由使用MediaButtonIntent的累西弗监听

 类似资料:
  • 大家好, 我有一个基于Java的手机(三星星2 526 0)和它的三个星期,我试图提出一个解决方案,以接收收到的电子邮件通知。手机配置了一个定期检查至少30分钟,但我需要一个更频繁的控制(最多5分钟)。 我已经尝试了无数的解决方案,我想出了最接近的一个,是一个自定义的mujmail midlet,它通过imap支持我的gmail邮箱,多亏了netbeans编辑器。重点是,我修改了mujmail的轮

  • 我在使用带有WebRTC的Callkit进行VOIP呼叫时,在从锁屏接听呼叫时,遇到了音频问题。 一般功能: 我的应用程序在启动时激活audio会话。对于进线量,SDP报价 如果应用程序在前台,它工作正常。 但是,当手机被锁定,用户从锁屏接听电话时,流被交换,但在用户自己进入应用程序之前,两端都没有音频。 当用户进入应用程序时,两端的音频都会激活。 所有后台设置和功能都设置正确。 我还提到了苹果员

  • 我试图捕捉当手机处于深度睡眠模式时的音量增加/减少事件。我读了几篇文章和这里我做了什么。 在Activities方法中,我设置了一个 我读到,即使我的屏幕被锁定,如果我设置了这个,我的应用程序将响应事件。另外,我已经添加了Android清单的权限。 然后在方法中声明广播接收器 当应用程序处于前台或后台时,这一切都工作得很好,但然后我通过按电源按钮锁定手机屏幕,应用程序停止接收广播事件,我认为必须解

  • 这是最简单的同步机制。 这是一个在用户模式下实现的软件机制。 这是一个繁忙的等待解决方案,可用于两个以上的进程。 在这个机制中,使用了锁变量。 两个锁定值是可能的,可以是或。锁定值表示临界区域是空的,而锁定值表示它被占用。 想要进入临时部分的进程首先检查锁定变量的值。 如果它是,那么它将锁的值设置为并进入临界区,否则等待。 该机制的伪代码如下所示。 如果我们看一下伪代码,发现代码中有三个部分。 入

  • 单选按钮通常表示组中用户可用的许多可选按钮之一。 每个按钮,wx.RadioButton类的对象在圆形按钮旁边都有一个文本标签。 为了创建一组可相互选择的按钮,第一个wxRadioButton对象的style参数设置为wx.RB_GROUP。 后续按钮对象将添加到组中。 wxPython API也包含wx.RadioBox类。 它的对象为组提供边框和标签。 组中的按钮可以水平或垂直排列。 wx.R