Skip to content

Commit

Permalink
添加后台监听按键的方法
Browse files Browse the repository at this point in the history
  • Loading branch information
kangear committed Oct 29, 2014
1 parent 31d3d87 commit 9940d6c
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 0 deletions.
9 changes: 9 additions & 0 deletions AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,15 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MusicIntentReceiver">
<intent-filter>
<action android:name="android.media.AUDIO_BECOMING_NOISY" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>

</application>

</manifest>
8 changes: 8 additions & 0 deletions src/com/example/testkey/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
Expand Down Expand Up @@ -54,6 +56,11 @@ public void onCheckedChanged(CompoundButton buttonView,
update();
}
});

// for service
((AudioManager)getSystemService(AUDIO_SERVICE)).registerMediaButtonEventReceiver(new ComponentName(
this,
MusicIntentReceiver.class));
}


Expand Down Expand Up @@ -212,6 +219,7 @@ public boolean onKeyDown(int keyCode, KeyEvent event) {

public void printToast(String str) {
tv.setText(str);
Log.i(LOG_TAG, str);
}

private final BroadcastReceiver homePressReceiver = new BroadcastReceiver() {
Expand Down
72 changes: 72 additions & 0 deletions src/com/example/testkey/MusicIntentReceiver.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.example.testkey;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.Toast;

/**
* Receives broadcasted intents. In particular, we are interested in the
* android.media.AUDIO_BECOMING_NOISY and android.intent.action.MEDIA_BUTTON intents, which is
* broadcast, for example, when the user disconnects the headphones. This class works because we are
* declaring it in a &lt;receiver&gt; tag in AndroidManifest.xml.
*/
public class MusicIntentReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(android.media.AudioManager.ACTION_AUDIO_BECOMING_NOISY)) {
Toast.makeText(context, "Headphones disconnected.", Toast.LENGTH_SHORT).show();

// send an intent to our MusicService to telling it to pause the audio
//context.startService(new Intent(MusicService.ACTION_PAUSE));

} else if (intent.getAction().equals(Intent.ACTION_MEDIA_BUTTON)) {
Log.i("MusicIntentReceiver", "ACTION_MEDIA_BUTTON!");
KeyEvent keyEvent = (KeyEvent) intent.getExtras().get(Intent.EXTRA_KEY_EVENT);
if (keyEvent.getAction() != KeyEvent.ACTION_DOWN)
return;

switch (keyEvent.getKeyCode()) {
case KeyEvent.KEYCODE_HEADSETHOOK:
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
//context.startService(new Intent(MusicService.ACTION_TOGGLE_PLAYBACK));
break;
case KeyEvent.KEYCODE_MEDIA_PLAY:
//context.startService(new Intent(MusicService.ACTION_PLAY));
break;
case KeyEvent.KEYCODE_MEDIA_PAUSE:
//context.startService(new Intent(MusicService.ACTION_PAUSE));
break;
case KeyEvent.KEYCODE_MEDIA_STOP:
//context.startService(new Intent(MusicService.ACTION_STOP));
break;
case KeyEvent.KEYCODE_MEDIA_NEXT:
//context.startService(new Intent(MusicService.ACTION_SKIP));
break;
case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
// TODO: ensure that doing this in rapid succession actually plays the
// previous song
//context.startService(new Intent(MusicService.ACTION_REWIND));
break;
}
}
}
}

0 comments on commit 9940d6c

Please sign in to comment.