O Android BroadcastReceiver não se registra
Estou tentando adicionar um receptor de transmissão simples ao meu aplicativo de áudio, para que eu possa silenciar tudo quando o usuário clicar em ACTION_MEDIA_BUTTON no fone de ouvido. Eu li que você pode registrá-lo no manifesto ou dinamicamente no código. Eu segui o caminho de registrá-lo no código, pois preciso chamar métodos dentro da minha classe de atividade principal para reagir ao pressionar o botão de mídia. Por alguma razão, no entanto, meu BroadcastReceiver simplesmente não se registra e não consigo encontrar nada que explique o motivo (cabelos grisalhos aumentando).
A seguir, é o que eu tenho no MainActivity.java:
public class MainActivity extends Activity {
public IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
public BroadcastReceiver MediaButtonIntentReceiver =
new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String intentAction = intent.getAction();
if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
KeyEvent event = (KeyEvent) intent
.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
int action = event.getAction();
if (action == KeyEvent.ACTION_DOWN) {
Log.e("INFO", "Media Button Pressed");
MuteAll();
}
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Register media button event receiver
intentFilter.addAction("android.intent.action.ACTION_MEDIA_BUTTON");
intentFilter.setPriority(10000);
this.registerReceiver(MediaButtonIntentReceiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
// Unregister media button event receiver
unregisterReceiver(MediaButtonIntentReceiver);
}
};
Estou certo de que o BroadcastReceiver não se registra, pois agrupar o registro como abaixo me dá um brinde confirmando que é nulo:
if (registerReceiver(MediaButtonIntentReceiver, intentFilter) == null)
{
Toast.makeText(this, "Could not register receiver", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "Receiver registered", Toast.LENGTH_LONG).show();
}
EDIT: Eu também tentei o seguinte com base em sugestões até agora:
Lendo através de -http://developer.android.com/training/managing-audio/volume-playback.html Tentei registrar meu receptor no manifesto assim ...
<receiver android:name="com.mydomain.myapp.MainActivity$MediaButtonIntentReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
And then added the following example code:
public AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE);
...
// Start listening for button presses
am.registerMediaButtonEventReceiver(RemoteControlReceiver);
O Eclipse reclamou que o mContext não resolveu nada, então adicionei o seguinte:
private Context mContext;
Em seguida, reclamou da parte "mContext.getSystemService (Context.AUDIO_SERVICE)", dizendo "Incompatibilidade de tipo: não é possível converter de Object para AudioManager"
Então, adicionei um elenco ao AudioManager:
public AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
E, em seguida, adicionou o código de registro do receptor sugerido:
am.registerMediaButtonEventReceiver(MediaButtonIntentReceiver);
Ao qual se queixou de "registerMediaButtonEventReceiver" dizendo "O método registerMediaButtonEventReceiver (ComponentName) no tipo AudioManager não é aplicável aos argumentos (BroadcastReceiver)"
Claramente, estou fazendo algo errado aqui. Digitei o código de exemplo, como mostrado, mas ele nem compila.
--- END EDIT -----------------------------
Esperando que alguém lá fora possa me ajudar. Entre em contato se precisar fornecer mais alguma coisa.