Android: Cómo alternar entre los ajustes de vibración (siempre, nunca, sólo en modo silencioso, sólo cuando no está en modo silencioso)? Revisited

Problema

Encontrar métodos para alternar entre:

  • Siempre
  • Nunca
  • Sólo en modo silencioso
  • Sólo cuando no está en modo silencioso

Estas opciones se encuentran por la ruta de acceso — Menú >> Configuración >> Sonido >> Vibrar — en el teléfono.

Es sencillo cambiar por navegación en el teléfono (por cierto, mi teléfono es un Motorola Atrix 2 con Android 2.3.3), pero todavía tengo que encontrar métodos para usar en mi código.

Código

Básicamente tengo botones que deben manipular los ajustes de vibración cuando se hace clic. Uno de estos botones se muestra aquí:

bSilent.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF); audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_OFF); Toast.makeText(getBaseContext(), "Set to Never", Toast.LENGTH_SHORT).show(); } }); 

audioManager se define en algún lugar por encima de este código como:

 final AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 

Android ofrece AudioManager.setVibrateSetting, pero ahora está obsoleto. En su lugar, hacen referencia al método getRingerMode.

Http://developer.android.com/reference/android/media/AudioManager.html

Sin embargo, el uso de estas funciones (y cualquier combinación de ellas) no se mueve eficientemente entre los cuatro ajustes de vibración. Por ejemplo, si empiezo en "Siempre", es aparentemente imposible para mí llegar a "Nunca". Todas las combinaciones de métodos de vibración sólo se mueven entre "Siempre" y "Sólo en modo silencioso". Por otro lado, si empiezo en "Nunca", los métodos ofrecidos solo cambiarán entre "Nunca" y "Sólo cuando no esté en modo silencioso".

Por lo tanto, supongamos que quiero tener mi teléfono en modo silencioso y quiero que vibre. Entonces, decido que no deseo que vibre más. No puedo cambiar de "Siempre" o "Sólo en modo silencioso" a "Nunca".

Soluciones y Puestos Pasados

Soy consciente de que se trata de una publicación duplicada en StackOverflow. La cuestión se ha planteado antes de …

Aquí: Configuración de Vibrar en Android 2.2

Y (más recientemente) aquí: Cambio de la configuración de vibración

El primero de los enlaces proporciona una "respuesta". LuTHieR termina en una discusión y finalmente descubre un camino por su cuenta. Él hace referencia al sitio:

Aplicaciones

y dice "Miré el código fuente de la clase com.android.settings.Settings y copié parte de los métodos que habilitan y desactivan vibrar".

Miré a través de este sitio vigorosamente y no pude encontrar lo que él hizo. ¿Podría alguien aclarar su solución?

Pregunta

¿Alguien tiene una manera de cambiar con precisión entre "Siempre", "Nunca", "Sólo en modo silencioso" y "Sólo cuando no está en modo silencioso"?

Mi solución (trayectoria de la función con el ingreso String sParam con el modo necesario del sistema de la vibración, refactoring si es necesario entero 0-3):

 AudioManager audioManager = getSystemService( Context.AUDIO_SERVICE); if( Build.VERSION.SDK_INT < 16) { // sParam may be: // 0 - Always // 1 - Never // 2 - Only in silent mode (when sound is off) // 3 - Only when not in silent mode (when sound is on) if( (sParam.equals( "1") == true) || (sParam.equals( "3") == true)) { Settings.System.putInt( Static.contextApplication.getContentResolver(), "vibrate_in_silent", 0); if( sParam.equals( "1") == true) audioManager.setVibrateSetting( AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF); if( sParam.equals( "3") == true) audioManager.setVibrateSetting( AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON); } if( (sParam.equals( "0") == true) || (sParam.equals( "2") == true)) { Settings.System.putInt( Static.contextApplication.getContentResolver(), "vibrate_in_silent", 1); if( sParam.equals( "0") == true) audioManager.setVibrateSetting( AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON); if( sParam.equals( "2") == true) audioManager.setVibrateSetting( AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT); } } // else (for new SDK > 16 via setRingerMode() ??? ) 
  • GET_TASKS Permiso desactivado
  • Android: Cómo hacer que un botón sea visible una vez que se haya completado la visualización web
  • Android Llamar a un método de otra clase
  • Compartir recursos en bruto a través de WhatsApp
  • No se puede reemplazar el método onPostExecute () en AsyncTask Class o obtenerlo para activar
  • Verificación del número de teléfono Android
  • Android: declinó el permiso para vibrador (qué sucede?)
  • Redimensionamiento suave de un gráfico y una vista de mapa
  • Video Recorte o zoom con una coordenada específica?
  • Crear vínculo profundo para la aplicación móvil
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.