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

按下电源键时播放音频

经正祥
2023-03-14

我在我的应用程序中编写了这段代码

接收器.java

if (action.equals(Intent.ACTION_SCREEN_ON) && am.getRingerMode() == AudioManager.RINGER_MODE_NORMAL)
{
    if(u!=null) {
        stopPlaying();
        mp = MediaPlayer.create(context, u);
        mp.start();
    }
}
else if (action.equals(Intent.ACTION_SCREEN_OFF) && am.getRingerMode() == AudioManager.RINGER_MODE_NORMAL)
{
    if(u2!=null) {
        stopPlaying();
        mp = MediaPlayer.create(context, u2);
        mp.start();
    }
}
}

private void stopPlaying() {
if (mp != null) {
    mp.stop();
    mp.release();
    mp = null;
}
}

它工作完美,但是我注意到屏幕关闭时播放音频有延迟。我想这是因为设备在启动关闭状态之前会调暗屏幕。

我希望它在单击触发关闭状态的操作(例如单击电源按钮、手势或双击以唤醒和睡眠)时播放关闭音频。在这种情况下,我希望它在触发电源按钮时播放。

有办法让这成为可能吗?

共有1个答案

左丘宜年
2023-03-14

您添加此代码。

首先,您需要向清单文件添加以下权限:

<uses-permission android:name="android.permission.PREVENT_POWER_KEY" />

要处理短按和长按,请在活动类中添加以下覆盖:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_POWER) {
        // Do something here...
        event.startTracking(); // Needed to track long presses
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_POWER) {
        // Do something here...
        return true;
    }
    return super.onKeyLongPress(keyCode, event);
}

用于广播接收器

在menifest文件中

<receiver android:name=".MyReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.SCREEN_OFF" >
            </action>
            <action android:name="android.intent.action.SCREEN_ON" >
            </action>
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED" >
            </action>
            <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" >
            </action>
            <action android:name="android.intent.action.ACTION_SHUTDOWN" >
            </action>
        </intent-filter>
    </receiver>

在MyReceiver.java

@Override
public void onReceive(Context context, Intent intent) {

    // TODO Auto-generated method stub

    Log.v("onReceive", "Power button is pressed.");

    Toast.makeText(context, "power button clicked", Toast.LENGTH_LONG)
            .show();

    // perform what you want here

}
 类似资料:
  • 问题内容: 我有这个代码 它的工作原理,但不是我所期望的。声音会播放,但仅在我每次按下按钮时播放。我的主意是 当我按下按钮时,声音会播放,当我停止动作(手指在按钮之外)时,音乐会暂停。 有什么想法吗? 谢谢 问题答案: 这应该可以工作(我认为您的开关柜出了点问题):

  • 问题内容: 我是编程的初学者,并开始学习Swift,以制作一款有趣的钢琴应用。 按下按钮时我无法播放声音。我已经搜索了一些网站,但是我还是个初学者,无法理解… http://www.tmroyal.com/playing-sounds-in-swift-avaudioplayer.html http://www.rockhoppertech.com/blog/swift- avfoundation

  • 我想创建一个非常简单的应用程序,当你按下空格键时,它会开始一首歌曲,但当我启动应用程序并按下空格键,我只会听到“砰”的一声,什么也不会开始。没有音乐。 代码如下:

  • 问题内容: 我正在Android上创建游戏,并且已经将这个问题搁置了一段时间,现在又回到了问题上。在我的游戏中,我有背景音乐,枪声,爆炸声等,而且我需要能够同时玩它们。现在,当我在SoundPool类上调用play时,当前正在播放的声音被打断,新的声音开始播放。下面是我的SoundManager类及其用法。任何帮助将不胜感激,因为这确实是我需要拥有如此多音效的第一款游戏。谢谢! …这是我如何使用该

  • 问题内容: 单击按钮时,我尝试播放音频文件,但它不起作用,我的html代码为: 我的JavaScript是: 问题答案: 哪种方法? 您可以使用或或标签播放音频。延迟加载(需要时加载)如果声音很小,则声音是最好的方法。您可以动态创建音频元素,在加载音频元素时可以使用来启动和暂停。 我们使用的东西 我们将使用事件来检测我们的文件已准备好播放。 音频元素没有任何功能。我们只能暂停它们。而且,当我们要从

  • 我想知道如何创建像这个网站上的按钮,当点击将播放一个简短的音频文件。 https://www.theitalianexperiment.com/learn-意大利语/to-be 我知道如何使用该元素添加音频文件,但我想以按钮格式将其添加到文本的左边(例如,添加到下面的代码中),就像在网站上一样,这就是我所坚持的。 HTML CSS 谢谢!