#android
#Android
Вопрос:
ПРИВЕТ, я нахожусь в ситуации, когда мне нужно отображать уведомление при поступлении вызова. Для этого я использую широковещательный приемник. Код приведен ниже
public class MyPhoneStateListener extends PhoneStateListener {
public Context context;
@Override
public void onCallStateChanged(int state, String incomingNumber) {
// TODO Auto-generated method stub
super.onCallStateChanged(state, incomingNumber);
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
NotificationManager notifier = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
//Get the icon for the notification
int icon = R.drawable.icon;
Notification notification = new Notification(icon,"Simple Notification",System.currentTimeMillis());
//Setup the Intent to open this Activity when clicked
Intent toLaunch = new Intent(context, main.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, toLaunch, 0);
//Set the Notification Info
notification.setLatestEventInfo(context, "Hi!!", "This is a simple notification", contentIntent);
//Setting Notification Flags
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.defaults |= Notification.DEFAULT_SOUND;
notification.flags |= Notification.FLAG_INSISTENT;
// notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");
//Send the notification
notifier.notify(0x007, notification);
Log.d("CALL", "IDLE");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d("DEBUG", "OFFHOOK");
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.d("DEBUG", "RINGING");
break;
}
}
}
Теперь проблема в том, что звук для уведомления не воспроизводится, но уведомление отображается правильно. Кто-нибудь может пролить свет на это, пожалуйста, почему звук уведомления не воспроизводится?
Ответ №1:
Исправить
notification.defaults |= Notification.DEFAULT_SOUND;
Для
notification.flags |= Notification.DEFAULT_SOUND;
Комментарии:
1. не работает… Я думаю, что это ошибка в Android.. Должен ли я сообщить об этом там?
Ответ №2:
В итоге я воспроизвел звук вручную через медиаплеер. Код теперь выглядит следующим образом
public class MyPhoneStateListener extends PhoneStateListener {
public Context context;
public static final String PREFS_NAME = "ealertprefs";
@Override
public void onCallStateChanged(int state, String incomingNumber) {
// TODO Auto-generated method stub
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
Log.v("CALL", "IDLE");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d("DEBUG", "OFFHOOK");
break;
case TelephonyManager.CALL_STATE_RINGING:
if(call_from_elist(incomingNumber)) {
wake_up_phone();
send_notification();
create_sound();
}
Log.d("DEBUG", "RINGING");
break;
}
}
private boolean call_from_elist(String number) {
return true;
}
private void wake_up_phone() {
AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
}
private void send_notification(){
NotificationManager notifier = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
int icon = R.drawable.icon;
Notification notification = new Notification(icon,"Simple Notification",System.currentTimeMillis());
Intent toLaunch = new Intent(context, main.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, toLaunch, 0);
notification.setLatestEventInfo(context, "Hi!!", "This is a simple notification", contentIntent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notifier.notify(0x007, notification);
}
private void create_sound() {
Uri alert;
SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0);
String ringtone = settings.getString("ringtone_uri", "");
if(ringtone.equals("")) {
alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
}
else {
alert = Uri.parse(ringtone);
}
MediaPlayer mMediaPlayer = new MediaPlayer();
try {
mMediaPlayer.setDataSource(context, alert);
//final AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
//if (audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) != 0) {
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
//mMediaPlayer.setLooping(true);
mMediaPlayer.prepare();
mMediaPlayer.start();
//}
}
catch(IOException e) {
Log.v("CALL", e.getMessage());
}
}
}