Разный объем в android [дубликат]

ISO / IEC 9899: 6.7.2.1 / 10

Реализация может выделить любой адресный блок хранения, достаточно большой для хранения бит-поля. Если остается достаточно места, бит-поле, которое сразу же следует за другим битовым полем в структуре, должно быть упаковано в соседние биты того же блока. Если остается недостаточное пространство, то будет ли бит-поле, которое не подходит, помещается в следующий блок или перекрывает смежные единицы, это определяется реализацией. Порядок распределения бит-полей в пределах единицы (от высокого порядка до младшего или низкого порядка) определяется реализацией.

Безопаснее использовать операции смены битов вместо того, чтобы делать какие-либо предположения о упорядочении или выравнивании битового поля при попытке написать переносимый код независимо от системы endianness или bitity.

Также см. EXP11-C. Не применяйте операторов, ожидающих одного типа, к данным несовместимого типа .

11
задан trgraglia 30 January 2012 в 12:39
поделиться

5 ответов

Я не знаю, почему это произойдет, однако приведенный ниже код работает. Вы должны установить источник данных с помощью setDataSource() вместо create().

Этот код работает:

MediaPlayer mp = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.setDataSource(this,Uri.parse("android.resource://PACKAGE_NAME/"+R.raw.soundfile));
mp.prepare();
mp.start();

Этот код не работа:

MediaPlayer mp = MediaPlayer.create(this, R.raw.soundfile);
mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.prepare();
mp.start();
23
ответ дан Darshan Rivka Whittle 17 August 2018 в 09:18
поделиться
  • 1
    лучше написать uri как: Uri.parse("android.resource://"+mContext.getPackageName()+"/"+R.raw.sound) – Amir Hossein Ghasemi 18 August 2016 в 16:21

Попробуйте следующее:

player.setAudioStreamType(AudioManager.STREAM_ALARM);
player.prepare();
player.start();

И почему вы вызываете «audioManager.getStreamVolume (AudioManager.STREAM_ALARM);»? Значение не сохраняется в переменной, поэтому оно бесполезно;)

Надеюсь, что это помогло

0
ответ дан Force 17 August 2018 в 09:18
поделиться
  • 1
    Я попробовал это с player.prepare (), но это не имело никакого значения. Звук еще не воспроизводится. Я сохранял объем потока в переменной, которая используется позже в моем приложении, я временно использовал назначение, чтобы помочь с отладкой. – James 14 August 2011 в 17:04
[Д0] 1. setAudioStreamType (int streamtype)

Должен вызывать этот метод перед подготовкой ();

2. MediaPlayer.create (контекст контекста, int остаток)

При успехе, prepare () уже был вызван и не должен быть вызван снова.

2
ответ дан jknight 17 August 2018 в 09:18
поделиться

Проблема в том, что вы используете MediaPlayer.create() для создания MediaPlayer. Функция Create вызывает функцию prepare(), которая завершает работу вашего носителя и не позволяет вам изменять AudioStreamType.

Решение использует setDataSource вместо create:

MediaPlayer mp = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.setLooping(true);
try {
   mp.setDataSource(getApplicationContext(), yourAudioUri);
   mp.prepare();
} catch (IOException e) {
   e.printStackTrace();
}
mp.start();

Для получения дополнительной информации см. эту ссылку .

5
ответ дан Maedeh HM 17 August 2018 в 09:18
поделиться

Решение здесь устарело в API 22

. Я открыл свой собственный поток , чтобы понять это.

Вот обновленное рабочее решение.

mediaPlayerScan = new MediaPlayer();
try {
  mediaPlayerScan.setDataSource(getContext(),
          Uri.parse(getString(R.string.res_path) + R.raw.scan_beep));

  if (Build.VERSION.SDK_INT >= 21) {
    mediaPlayerScan.setAudioAttributes(new AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_ALARM)
            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
            .build());
  } else {
    mediaPlayerScan.setAudioStreamType(AudioManager.STREAM_ALARM);
  }
  mediaPlayerScan.prepare();
} catch (IOException e) {
  e.printStackTrace();
}
0
ответ дан nburn42 17 August 2018 в 09:18
поделиться
Другие вопросы по тегам:

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