在广播接收器中显示通知

时间:2011-05-31 11:03:12

标签: android

HI, 我遇到需要在通话到来时显示通知的情况。为此,我使用广播接收器。代码如下

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 个答案:

答案 0 :(得分:2)

修复

notification.defaults |= Notification.DEFAULT_SOUND;

notification.flags |= Notification.DEFAULT_SOUND;

答案 1 :(得分: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());
        }
    }
}