У меня есть сообщение об ошибке, что звук не работает на планшете ASUS Transformer, работающем под управлением 3.0.
Я не делаю ничего слишком странного, просто использую MediaPlayer и, похоже, работает на широком спектре телефонов. Однако я использую метод, описанный в этом сообщении, чтобы отключить звуки, если getRingerMode() возвращает что-то другое, кроме RINGER_MODE_NORMAL
. Таким образом, если у пользователя есть свой телефон на "вибрировать только", они не получают неожиданного звука (поскольку носители и звонки используют отдельные регуляторы громкости).
Возможно ли, что на планшете Android функция getRingerMode() возвращает RINGER_MODE_SILENT
, если планшет не имеет возможности телефона?
EDIT: просто обратите внимание, что на эмуляторе, ничего не меняя, я получаю RINGER_MODE_NORMAL.
РЕДАКТИРОВАТЬ 2. В заключительном отчаянии я удалил проверку режима звонка и повторно опубликовал на рынке. Парень только что подтвердил, что звуки теперь работают. Кажется, что getRingerMode() возвращает не что-то иное, чем RINGER_MODE_NORMAL, на некоторых таблицах.
Это код из GingerBread. Он вернет RINGER_MODE_NORMAL
, если IAudioService не сможет вернуть getRingerMode();
/**
* Returns the current ringtone mode.
*
* @return The current ringtone mode, one of {@link #RINGER_MODE_NORMAL},
* {@link #RINGER_MODE_SILENT}, or {@link #RINGER_MODE_VIBRATE}.
* @see #setRingerMode(int)
*/
public int getRingerMode() {
IAudioService service = getService();
try {
return service.getRingerMode();
} catch (RemoteException e) {
Log.e(TAG, "Dead object in getRingerMode", e);
return RINGER_MODE_NORMAL;
}
}
Один шаг ниже,
IAudioService#getRingerMode()
throws android.os.RemoteException
Единственное отличие в Honeycomb (чтение chengelog) в AudioManager:
Добавленные поля int MODE_IN_COMMUNICATION
И ничего в 3.1 в этом классе, поэтому я предполагаю, что код Gingerbread по-прежнему действителен.