Android BroadcastReceiver не будет регистрироваться
Я пытаюсь добавить простой широковещательный приемник в мое аудио приложение, чтобы я мог отключить звук, когда пользователь нажимает на свою гарнитуру ACTION_MEDIA_BUTTON. Я читал, что вы можете зарегистрировать его в манифесте или динамически в коде. Я прошел путь регистрации его в коде, так как мне нужно вызывать методы в моем основном классе активности, чтобы реагировать на нажатие кнопки мультимедиа. Однако по какой-то причине мой BroadcastReceiver просто не регистрируется, и я не могу найти ничего, что объясняет почему (увеличение седых волос).
Вот что я имею в 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);
}
};
Я уверен, что BroadcastReceiver не регистрируется, поскольку завершение регистра, как показано ниже, дает мне тост, подтверждающий, что он нулевой:
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();
}
РЕДАКТИРОВАТЬ: я также попробовал следующее на основе предложений до сих пор:
Чтение через -http://developer.android.com/training/managing-audio/volume-playback.html Я попытался зарегистрировать мой получатель в манифесте так ...
<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);
Eclipse пожаловалась, что mContext ни к чему не привела, поэтому я добавил следующее:
private Context mContext;
Затем он пожаловался на часть «mContext.getSystemService (Context.AUDIO_SERVICE)», сказав: «Несоответствие типов: невозможно преобразовать объект в AudioManager»
Поэтому я добавил приведение к AudioManager:
public AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
А затем добавил предложенный регистрационный код получателя:
am.registerMediaButtonEventReceiver(MediaButtonIntentReceiver);
На что он пожаловался на «registerMediaButtonEventReceiver», сказав: «Метод registerMediaButtonEventReceiver (ComponentName) в типе AudioManager не применим для аргументов (BroadcastReceiver)»
Очевидно, я делаю что-то не так здесь. Я ввел их пример кода, как показано, но он даже не компилируется.
--- КОНЕЦ РЕДАКТИРОВАНИЯ -----------------------------
Надеюсь, кто-то там может помочь мне. Пожалуйста, дайте мне знать, если мне нужно предоставить что-нибудь еще.