Я пытаюсь добавить простой широковещательный приемник в свое аудио приложение, чтобы я мог отключить все, когда пользователь нажимает на их ACTION_MEDIA_BUTTON на своей гарнитуре. Я читал, что вы можете либо зарегистрировать его в манифесте, либо динамически в коде. Я пошел по пути регистрации его в коде, так как мне нужно вызвать методы в моем основном классе активности, чтобы реагировать на нажатие кнопки мультимедиа. По какой-то причине, однако, мой BroadcastReceiver просто не регистрируется, и я не могу найти ничего, что объясняет, почему (седые волосы растут).Android 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();
}
EDIT: Я также попытался следующие на основе предложений до сих пор:
прочитывая - 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);
Затмения жаловались, что 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) "
Очевидно, что я здесь что-то не так. Я ввел свой пример кода, как показано, но он даже не компилируется.
--- END EDIT -----------------------------
Надеясь кто-то может помочь мне , Пожалуйста, дайте мне знать, если мне нужно что-то предложить.
Поскольку трансляция 'ACTION_MEDIA_BUTTON' не является липким намерением,' registerReceiver() 'возвращает null. Вы консультировались с этой страницей? http://developer.android.com/training/managing-audio/volume-playback.html –
Спасибо за ответ. Да, я прочитал эту страницу через многие другие, но я не понимаю, как BroadcastReceivers и Intents, кажется, моя самая большая проблема. – irwazr
Привет, Майк, я редактировал свое оригинальное сообщение, чтобы включить вывод моих попыток следовать примерам в предложенной вами ссылке. Есть идеи? – irwazr