Alarm Klingelton Lautstärke

  • 4 Antworten
  • Letztes Antwortdatum
N

newpageart

Neues Mitglied
0
Hallo liebe Forengemeinde,

ich habe mir mit dem Alarmmanger eine Erinnerungsfunktion gebastelt. Diese Ruft um eine bestimmte Uhrzeit ein Activity mit eine Erinnerungsmeldung auf. dazu wird noch ein Klingelton abgespielt. Dies funktioniert auch soweit ganz gut. Doch leider ist der Klingelton immer in der saeleben Lautstärke. Ich hätte gern das die lautstärke abhängig von den Systemeinstellungen ist. Also wenn die allgemeine lautstärke auf leise steht, dann soll der Klingelnon ebenfalls leise ertönen. Ausserdem soll der Vibrationsalarm verwendet werden, wenn das System auf vibration eingestellt ist. Hat damit jemand erfahrung und könnte mir dabei helfen?
Hier der Code mit dem ich den Klingelton starte.

Code:
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alarm);

        playSound(this, getAlarmUri());        
    }

    private void playSound(final Context context, final Uri alert) {
        mMediaPlayer = new MediaPlayer();
        try {
            mMediaPlayer.setDataSource(context, alert);
            final AudioManager audioManager = (AudioManager) context
                    .getSystemService(Context.AUDIO_SERVICE);
            if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
                mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
                mMediaPlayer.prepare();
                mMediaPlayer.start();
            }
        } catch (IOException e) {
            Log.v("Survey", "ERROR playSound(): "+e.toString());
        }
        
        try {
            RingtoneStopper stopper = new RingtoneStopper(30000,1000); 
            stopper.start();
        } catch (Exception e) {
            Log.v("Survey", "ERROR playSound(): "+e.toString());
        }
    }
    
    //define a countdown timer for 30 seconds that stops the MediaPlayer
    public class RingtoneStopper extends CountDownTimer{

        public RingtoneStopper(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }

        @Override
        public void onFinish() {
            try {
                Log.v("Survey", "STOP mMediaPlayer (onFinish)");
                mMediaPlayer.stop();
            } catch (Exception e) {
                Log.v("Survey", "ERROR RingtoneStopper: "+e.toString());
            }
        }

        @Override
        public void onTick(long millisUntilFinished) {
        }
    }

    private Uri getAlarmUri() {
        Uri alert = RingtoneManager
                .getDefaultUri(RingtoneManager.TYPE_ALARM);
        if (alert == null) {
            alert = RingtoneManager
                    .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            if (alert == null) {
                alert = RingtoneManager
                        .getDefaultUri(RingtoneManager.TYPE_RINGTONE);
            }
        }
        return alert;
    }
Vielen lieben Dank!
Tom
 
AudioManager bietet verschiede STREAMS an...

Gruß
 
Hallo StefMa,

danke für den Tip. Ich habe mir das gerade mal ageschaut. Dort kann ich zumindest die unterscheidung zwischen Lautstärke An, Aus und Vibration machen.
myAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); myAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); } myAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);

Mir ist allerdings nicht ganz klar wie ich das nun abhängig von den Geräteeinstellungen machen könnte. Also die Lautstärke des Gerätes auslesen und dementsprechend für den Alarm setzen.

Viele Grüße,
Tom
 
Du benutzt derzeit den Stream Notification.
Wenn du den Stream auf RINGER stellst (oder so ähnlich), dann passt es sich automatisch an... So meine Theorie ;)

Gruß

€dit: mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); <- diesen Part meine ich
 
Super! Es funktioniert!!!

Ohman so einfach kann es manchmal sein. Ich habe den Code noch etwas erweitert und nun geht auch der Vibrationsalarm.
Danke!!!!!!!

Code:
            mMediaPlayer.setDataSource(context, alert);
            final AudioManager audioManager = (AudioManager) context
                    .getSystemService(Context.AUDIO_SERVICE);
            if (audioManager.getStreamVolume(AudioManager.RINGER_MODE_NORMAL) != 0) {  // AudioManager.STREAM_ALARM
                mMediaPlayer.setAudioStreamType(AudioManager.RINGER_MODE_NORMAL); // AudioManager.STREAM_ALARM
                mMediaPlayer.prepare();
                mMediaPlayer.start();
            }else{
                Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
                vibrator.vibrate(2000);
            }
 
Zurück
Oben Unten