2011-05-31 51 views
2

嗨, 我处于通话到达时需要显示通知的情况。为此,我正在使用广播接收器。代码是在广播接收器中显示通知

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; 
     } 
    } 

} 

现在的问题是声音通知没有播放,但通知正在正确显示。请问任何人都可以点亮它,为什么通知声音不被播放?

回答

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()); 
     } 
    } 
} 
2

修复

notification.defaults |= Notification.DEFAULT_SOUND; 

notification.flags |= Notification.DEFAULT_SOUND; 
+0

不工作...我认为这是一个android的错误..我应该在那里报告吗? – 2011-05-31 12:25:52