Reputation: 4835
HI, I am in a situation that I need to display notification when call arrives. For this I am using broadcast receiver. Code is below
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;
}
}
}
Now problem is that sound for the notification is not playing but notification is being displayed correctly. Can anyone shed light on it please why notification sound is not being played?
Upvotes: 2
Views: 4601
Reputation: 4835
I ended up playing sound manually via media player. Code Now Looks like
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());
}
}
}
Upvotes: 2
Reputation: 43108
Fix
notification.defaults |= Notification.DEFAULT_SOUND;
to
notification.flags |= Notification.DEFAULT_SOUND;
Upvotes: 2