Уведомление в строке состояния со звуком во время разговора - PullRequest
3 голосов
/ 21 января 2010

Я делаю приложение, которое должно уведомить пользователя, выполняющего вызов, о том, что вызов принимается слишком долго ... Я запустил все, и уведомление было сделано в нужное время (я вижу это в строке состояния), но без звука. Если я звоню уведомлением, когда нет звонка, звук воспроизводится.

Мое уведомление выглядит так:

        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    int icon = R.drawable.icon;
    CharSequence tickerText = "Hello From CallTimerService";
    long when = System.currentTimeMillis();

    Notification notification = new Notification(icon, tickerText, when);

    Context context = getApplicationContext();
    CharSequence contentTitle = "My notification";
    CharSequence contentText = "ss";
    Intent notificationIntent = new Intent(this, CallTimer.class);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
    notification.defaults = Notification.DEFAULT_SOUND;
    notification.flags |= Notification.FLAG_AUTO_CANCEL;

    mNotificationManager.notify(2, notification);

Я также попытался изменить Notification.audioStreamType, используя AudioManager.STREAM_, но безуспешно.

Есть ли у кого-нибудь тело сейчас, как это сделать? или просто хорошая идея, что попробовать дальше ....

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

В моем приложении есть возможность воспроизводить звук, когда пользователь разговаривает по телефону. Что вам нужно сделать, это использовать медиаплеер для воспроизведения звука. Вот мой код:

if(callStateIdle){
    notification.sound = Uri.parse(notificationSound);
}else{
    new playNotificationMediaFileAsyncTask().execute(notificationSound);                    
}

Вот асинхронная задача:

private static class playNotificationMediaFileAsyncTask extends AsyncTask<String, Void, Void> {

    protected Void doInBackground(String... params) {
        MediaPlayer mediaPlayer = null;
        try{
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setLooping(false);
            mediaPlayer.setDataSource(_context,  Uri.parse(params[0]));
            mediaPlayer.prepare();
            mediaPlayer.start();
            mediaPlayer.setOnCompletionListener(new OnCompletionListener(){
                public void onCompletion(MediaPlayer mediaPlayer) {
                    mediaPlayer.release();
                    mediaPlayer = null;
                }
            }); 
            return null;
        }catch(Exception ex){
            Log.e("ERROR: " + ex.toString());
            mediaPlayer.release();
            mediaPlayer = null;
            return null;
        }
    }

    protected void onPostExecute(Void result) {
        //Do Nothing
    }

}

Пока это хорошо сработало.

1 голос
/ 16 сентября 2014

Попробуйте использовать RingtoneManager. У меня сработало следующее: RingtoneManager.getRingtone(context, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)).play();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...