широковещательный приемник включенПолучить проблему ACTION_MEDIA_BUTTON Android - PullRequest
2 голосов
/ 07 июля 2011

Я нашел много страниц об этом в сети, но ни одна из них не помогла мне. Я часами застрял в этой проблеме. Вот почему я решил задать свой вопрос.

То, что я хочу сделать, - это приложение, которое получает намерение типа ACTION_MEDIA_BUTTON, а метод onReceive () Broadcastreceiver что-то делает.

Моя активность такая:

public class MusicControlActivity extends Activity {

private MediaButtonIntentReceiver receiver = new MediaButtonIntentReceiver();
    @Override
    public void onCreate(Bundle p_SavedInstanceState) {
        super.onCreate(p_SavedInstanceState);
        setContentView(R.layout.main);


        IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
        filter.setPriority(1000);
        registerReceiver(receiver,filter);
}

@Override
public void onDestroy()
{
    unregisterReceiver(receiver);
}

И мой вещательный приемник следующим образом:

public class MediaButtonIntentReceiver extends BroadcastReceiver {
public MediaButtonIntentReceiver() 
{
    super();
}

@Override
public void onReceive(Context context, Intent intent) 
{
    String v_IntentAction = intent.getAction();
    if (!Intent.ACTION_MEDIA_BUTTON.equals(v_IntentAction)) {
        return;
    }
    KeyEvent v_Event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
    if (v_Event == null) {
        return;
    }
    int v_Action = v_Event.getAction();
    if (v_Action == KeyEvent.ACTION_DOWN) {
    // do something
        Toast.makeText(context, "BUTTON PRESSED!", Toast.LENGTH_SHORT).show(); 
    }
    abortBroadcast();
}
}

Проблема в том, что это не работает, независимо от того, что я делаю. Я попытался зарегистрировать его динамически с помощью registerReceiver, как в коде выше. Также я попробовал статически в AndroidManifest.xml, как это:

<receiver android:name=".MediaButtonIntentReceiver" android:enabled="true">
    <intent-filter android:priority="10000000">
        <action android:name="android.intent.action.ACTION_MEDIA_BUTTON" />
    </intent-filter>
</receiver>

И, как вы можете видеть, я установил приоритет на высокий уровень, хотя он не работает. Я занимаюсь этим целый день и не знаю, что делать. Метод onReceive от вещательного приемника не вызывается в любое время.

Кто-нибудь знает, что мне делать?

Ответы [ 2 ]

2 голосов
/ 12 июля 2013

Используйте вместо этого android.intent.action.MEDIA_BUTTON в своем манифесте. Проверить: http://developer.android.com/training/managing-audio/volume-playback.html

0 голосов
/ 07 июля 2011

Во-первых, вы должны прекратить использовать Toast в качестве диагностического теста. Используйте класс Log для входа в LogCat или точки останова или что-то в этом роде.

Далее вы должны избавиться от вашего MediaButtonIntentReceiver конструктора, так как он не нужен.

Тогда я бы сбросил блок if (!Intent.ACTION_MEDIA_BUTTON.equals(v_IntentAction)), так как он также не нужен.

Далее, я бы удостоверился, что ваша медиа кнопка действительно работает. Управляет ли оно другими приложениями, такими как музыкальный проигрыватель? Возможно, ваша мультимедийная кнопка не совместима с Android или что-то в этом роде.

...