2011-05-25 15 views
8

Estaba muy sorprendido de encontrar en la aplicación que actualmente estoy programando que cuando hago que reproduzca un sonido de notificación, se reproduce independientemente de si el teléfono se ha configurado en silencio o no.Android, la notificación de reproducción del teléfono suena incluso cuando está en modo silencioso? ¿Debo verificar el modo silencioso?

Seguramente el modo silencioso de los teléfonos debería ser una característica primordial o ¿debo verificarlo? Eché un vistazo rápido a la documentación, pero no vi nada diciendo esto? ¿Me estoy perdiendo de algo?

Este es mi código de notificación:

Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
     v.vibrate(300); 

     Uri alert = RingtoneManager 
       .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     MediaPlayer mMediaPlayer = new MediaPlayer(); 

     mMediaPlayer.setDataSource(this, alert); 

     final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
     if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) { 
      mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); 
      mMediaPlayer.setLooping(false); 
      mMediaPlayer.prepare(); 
      mMediaPlayer.start(); 
     } 

Gracias por cualquier comentario aquí!

Bex

+1

Tengo el mismo problema, sin embargo, estoy reproduciendo un archivo de sonido normal (no es una alarma). Algunas ideas ? – Leeeeeeelo

Respuesta

4

No estoy seguro sobre la documentación marcó, pero el Nexus One a continuación el modo silencioso checkbox dice claramente:

Silence all sounds except media & alarms. 

En el ejemplo que está jugando alarma (no notificación), por lo que es correcto.

+0

¡Oh, no me di cuenta de esto! ¡Enséñame a copiar el código! ¡Tampoco nos dimos cuenta de que las alarmas seguirían sonando! :) – Bex

+0

OK, siempre es más fácil para alguien "externo" descubrir su problema a corto plazo. Saludos. – Zelimir

4

Basado en los resultados de las pruebas parece que eres tú el que tiene que comprobar que:

if (audioManager.getRingerMode() == AudioManager.RINGER_MODE_NORMAL) { 
    // Play the sound 
} 
0

1) establecer StandupReciver.java

import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.media.AudioManager; 
import android.provider.Settings; 
import android.support.v4.app.NotificationCompat; 
import android.widget.Toast; 


public class StandupReciver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context,"inside Recevier",Toast.LENGTH_SHORT).show(); 
     NotificationManager myManager=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
     NotificationCompat.Builder mynoti=new NotificationCompat.Builder(context); 
    // FOR SILENT MODE 
    AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 

    // For Normal mode 
    int currentVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC); 
    int maxVolume = audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 
    float percent = 2.0f; 
    int seventyVolume = (int) (maxVolume*percent); 
    audio.setStreamVolume(AudioManager.STREAM_MUSIC, seventyVolume, 0); 
    audio.setRingerMode(AudioManager.RINGER_MODE_NORMAL); 
    audio.setStreamVolume(AudioManager.STREAM_MUSIC, audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0); 


    mynoti.setContentTitle("Stand up Notification"); 
    mynoti.setContentText("you need to stand up"); 
    mynoti.setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 }); 
    mynoti.setSound(Settings.System.DEFAULT_NOTIFICATION_URI); 
    mynoti.setSmallIcon(android.R.drawable.ic_btn_speak_now); 



    Intent il=new Intent(context,MainActivity.class); 
    PendingIntent pd= PendingIntent.getActivity(context,0,il,0); 
    mynoti.setContentIntent(pd); 
    mynoti.setAutoCancel(true); 
    myManager.notify(1,mynoti.build()); 
}} 

2) AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_SETTINGS"/> 
<receiver 
     android:name=".StandupReciver" 
     android:enabled="true" 
     android:exported="true" > 
     <intent-filter> 
      <action android:name="com.xyz.myown.recevier.Message"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
     </intent-filter> 
    </receiver> 

3) MainActivity.java

método de inicio

Toast.makeText(getApplicationContext(), "Start", Toast.LENGTH_SHORT).show(); 
       Intent i = new Intent(); 
       i.setAction("com.xyz.myown.recevier.Message"); 
       i.addCategory("android.intent.category.DEFAULT"); 
       PendingIntent pd = PendingIntent.getBroadcast(getApplicationContext(), 0, i, 0); 
       alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 10, pd); 

método de paro

Toast.makeText(getApplicationContext(),"Stop",Toast.LENGTH_SHORT).show(); 
      Intent i=new Intent(); 
      i.setAction("com.xyz.myown.recevier.Message"); 
      i.addCategory("android.intent.category.DEFAULT"); 
      PendingIntent pd= PendingIntent.getBroadcast(getApplicationContext(),0,i,0); 
      alarmManager.cancel(pd); 
+0

Creo que no es un buen enfoque. Como no sabemos Cuándo establecer CurrentVolume of audio manager nuevamente. –

Cuestiones relacionadas