Android BroadcastReceiver не может получить многоадресные события

Это статический метод, который я использую в своих проектах. Я добавляю его в свой класс Utils:

    public static void playSound(final Context context, final SoundType type)
    {

            new Thread(new Runnable()
            {

                @Override
                public void run()
                {
                    MediaPlayer mediaPlayer = new MediaPlayer();
                    int resId = -1;
                    switch (type)
                    {
                    case INCOMING_NOTIFICATION:
                        resId=R.raw.noti_sound;
                        break;
                    case SEND_BETTING_SLIP:
                        resId=R.raw.slip_sent;
                        break;
                    case TRIVIA_RIGHT_ANSWER:
                        resId=R.raw.game_bonus;
                        break;
                    case TRIVIA_WRONG_ANSWER:
                        resId=R.raw.whistle_referee_trivia_bad_answer;
                        break;
                    }

                    if (resId != -1)
                    {
                        mediaPlayer = MediaPlayer.create(context, resId);
                        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                        mediaPlayer.setLooping(false);
                        mediaPlayer.start();

                        while (mediaPlayer.isPlaying() == true)
                        {
                        }
                    }
                }
            }).start();

        }
}

, теперь я определяю Enum (SoundType) и помещаю mp3-файлы в папку raw в папку res.

10
задан Nikhil Agrawal 27 April 2013 в 10:40
поделиться

2 ответа

Да, и другие функции имеют ту же проблему "отмывания констант" (например, strchr, strstr, все такое).

Именно по этой причине C ++ добавляет перегрузки (21.4: 4 ): сигнатура функции strchr (const char *, int) заменяется двумя объявлениями:

const char* strchr(const char* s, int c);
      char* strchr(      char* s, int c);

Но, конечно, в C вы не можете иметь обе версии с одинаковым именем, корректные с константой, поэтому вы получите компромисс с неверной константой.

В C ++ не упоминаются аналогичные перегрузки для strtol и strtod, и, действительно, в моем компиляторе (GCC) их нет. Не знаю, почему нет: тот факт, что вы не можете неявно преобразовать char ** в const char ** (вместе с отсутствием перегрузки), объясняет это для C, но я не совсем понимаю, что было бы не так с перегрузкой C ++: Используйте android.intent.action.MEDIA_MOUNTED вместо android.content.Intent.ACTION_MEDIA_MOUNTED

4
ответ дан 3 December 2019 в 13:21
поделиться

Вам также необходимо установить схему данных как "файл".

   <intent-filter>
     <action android:name="android.intent.action.MEDIA_MOUNTED" />
     <data android:scheme="file" /> 
   </intent-filter>

Ссылка: поток разработчиков Android

45
ответ дан 3 December 2019 в 13:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: