В настоящее время я разрабатываю приложение для Android, которое воспроизводит звук пользователю через различные промежутки времени.У меня есть рабочий код (включен ниже), который работает точно так же, как и ожидалось на моем герое (работает на 2.2) и на эмуляторе 1.6.Тем не менее, он не работает на моих друзьях Xperia x8 - звук не воспроизводится.У него настроен тон уведомления, который прекрасно воспроизводится, когда он получает текст и т. Д.
private void prepareAudio(){
alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
mp = new MediaPlayer();
if(alert != null){
try {
mp.setDataSource(ctx, alert);
} catch (IllegalArgumentException e) {
Log.i("Prepare Audio", e.getMessage());
} catch (SecurityException e) {
Log.i("Prepare Audio", e.getMessage());
} catch (IllegalStateException e) {
Log.i("Prepare Audio", e.getMessage());
} catch (IOException e) {
Log.i("Prepare Audio", e.getMessage());
}
}
am = (AudioManager)ctx.getSystemService(Context.AUDIO_SERVICE);
}
private void notifyUser(){
if(alert != null){
if (am.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.setLooping(false);
try {
mp.prepare();
} catch (IllegalStateException e) {
Log.i("Notify User", e.getMessage());
} catch (IOException e) {
Log.i("Notify User", e.getMessage());
}
mp.start();
} else {
Log.i("Notify User", "Alarm volume zero");
}
} else {
Log.i("Notify User", "Uri is null");
}
long[] pattern = {0,200,300,600};
v.vibrate(pattern, -1);
}
PrepareAudio вызывается при инициализации класса и notifyUser каждый раз, когда мы хотим воспроизвести звук.Телефон всегда вибрирует, когда должен, поэтому определенно вызывается notifyUser.
Версия, которую установил мой друг, использует e.printStackTrace, а не Log.i, так что в logcat ничего не выплевывается.Я собираюсь попытаться достать его телефон, чтобы обновить его до версии с Log.i, но в то же время есть что-то явно не так с кодом, который может вызвать такую неустойчивую проблему?
Спасибо