我正嘗試創建一個應用程序,該應用程序在通過音量鍵更改電話鈴聲音量時作出響應。我創建了一個註冊BroadcastReceiver
的服務,但onReceive
沒有被調用。未收到MEDIA_BUTTON回撥
我在本論壇中看到過使用audioManager.registerMediaButtonEventReceiver
以及使用context.registerReceiver
的示例。根據useAudioManager
的狀態,我的班級可以嘗試其中之一。無論哪種方式,課程正在註冊,但onReceive
永遠不會被調用。
public class VolumeKeyReceiver extends BroadcastReceiver
{
private static final boolean useAudioManager = true;
@Override
public void onReceive(Context context, Intent intent)
{
Log.d("Monitor", "Volume key");
}
public void register(Context context)
{
if (useAudioManager)
{
AudioManager audioManager = (AudioManager)(context.getSystemService(Context.AUDIO_SERVICE));
ComponentName componentName = new ComponentName(context, this.getClass());
audioManager.registerMediaButtonEventReceiver(componentName);
Log.d("Monitor", "registered via AudioManager");
}
else
{
IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
context.registerReceiver(this, filter);
Log.d("Monitor", "registered via Context");
}
}
}
public class MonitorService extends Service
{
private VolumeKeyReceiver volumeKeyReceiver = null;
@Override
public void onCreate()
{
super.onCreate();
volumeKeyReceiver = new VolumeKeyReceiver();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
volumeKeyReceiver.register(this);
return START_STICKY;
}
}
<receiver android:name=".VolumeKeyReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
我略去了onDestroy()
和unregister()
。
任何想法,爲什麼我沒有得到通知?我缺少的任何權限?我正在Galaxy S3上測試它。
只有這也不起作用。而不是音量鍵,而不是在屏幕關閉時(或音量實際上沒有改變)。 – Michael