按下电源按钮时播放音频

时间:2015-11-30 05:29:14

标签: android audio

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

Receiver.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 个答案:

答案 0 :(得分:0)

您添加此代码。

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

@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);
}

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

<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>

对于BroadcastReceiver

在清单文件

@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

}

在MyReceiver.java中

img tag