2012-02-24 11 views
7

Sto tentando di mettere a tacere una chiamata in arrivo e impedire che il dispositivo BlackBerry squilli. Ho provato Alert.setVolume (0) e alcuni tasti EventInjector ma questo non ha funzionato.Come silenziare una chiamata in entrata

Quindi, come silenziare una chiamata in arrivo?

risposta

3

Si won't be able to disattivare il suono a livello di codice (trovato un paio di altre fonti che hanno detto la stessa cosa). Il modo migliore per risolvere il problema è stato utilizzare EventInjector per disattivare il profilo audio del telefono.

+0

Ok lo so. Ma come utilizzare EventInjector per modificare il profilo audio del telefono in modalità silenziosa? Ho provato un paio di combinazioni e non ha funzionato ... qualche idea? –

+0

Se si dispone di un dispositivo BB, è sufficiente capire le pressioni dei tasti necessarie per modificare il telefono nel profilo silenzioso, quindi replicarlo con il proprio codice. – jprofitt

+0

Capito ... l'ho provato .. e non ha funzionato :) –

6

Sono rimasto perplesso dalla tua domanda e ho deciso di raccogliere la sfida. Ho provato cosa diversa tra cui

  1. Riproduzione di un file di "silenzio" audio sperando di sovrapporsi squillo del dispositivo o occupare il lettore multimediale
  2. Hacking lo schermo del telefono tramite UiApplication.getUiApplication().getActiveScreen()
  3. eventi della tastiera Iniezione

Alla fine, iniettando il tasto VOLUME UP (il tasto VOLUME DOWN funziona allo stesso modo), l'evento ha funzionato per me e ha disattivato il suono del dispositivo durante la chiamata in arrivo. Lo svantaggio di questo approccio è che a volte il dispositivo squillava per una frazione di secondo prima del muting.

import net.rim.blackberry.api.phone.AbstractPhoneListener; 
import net.rim.blackberry.api.phone.Phone; 
import net.rim.device.api.system.Application; 
import net.rim.device.api.system.EventInjector; 
import net.rim.device.api.ui.Keypad; 

class Muter extends AbstractPhoneListener { 
    public void callIncoming(int callId) {   
     Thread muterThread = new Thread(new Runnable() { 
      public void run() { 
       EventInjector.invokeEvent(new EventInjector.KeyCodeEvent(EventInjector.KeyCodeEvent.KEY_DOWN, (char) Keypad.KEY_VOLUME_UP, 0)); 
       EventInjector.invokeEvent(new EventInjector.KeyCodeEvent(EventInjector.KeyCodeEvent.KEY_UP, (char) Keypad.KEY_VOLUME_UP, 0)); 
      } 
     }); 
     muterThread.setPriority(Thread.MAX_PRIORITY); 
     muterThread.start(); 
    } 
} 

public class MuterApp extends Application { 
    public static void main(String[] args){ 
     Phone.addPhoneListener(new Muter()); 
     new MyApp().enterEventDispatcher(); 
    } 
} 

Il seguente funziona anche (sostituire Muter filo in callIncoming() metodo con il seguente codice).

 UiApplication.getUiApplication().invokeLater(new Runnable() { 
      public void run() { 
       EventInjector.invokeEvent(new EventInjector.KeyCodeEvent(EventInjector.KeyCodeEvent.KEY_DOWN, (char) Keypad.KEY_VOLUME_UP, 0)); 
       EventInjector.invokeEvent(new EventInjector.KeyCodeEvent(EventInjector.KeyCodeEvent.KEY_UP, (char) Keypad.KEY_VOLUME_UP, 0)); 
      } 
     }); 
+0

Grazie per la risposta. Ma voglio che la suoneria si spenga quando si riceve la chiamata non dopo alcuni secondi. Ne hai idea? –

+0

@FaridFarhat Non al momento. A proposito, non è un paio di secondi, ma probabilmente in meno di mezzo secondo in alcuni casi. In altri, la suoneria viene disattivata immediatamente. – mrvincenzo

2

Alcuni telefoni Blackberry hanno una chiave di silenziamento. Puoi provare la seguente idea:

public void callIncoming(int callId) { 
    if (KeyPad.hasMuteKey()) { 
     /* Inject KEY_SPEAKERPHONE event */ 
    } 
    else { 
     /* Inject KEY_VOLUME_DOWN event N times, so that you get the mute effect */ 
    } 
} 
0

io sono abbastanza nuovo a tutto questo ... ma ho pensato che potrei anche mettere nei miei 2 centesimi vale la pena ...

ho cercato di trovare modi per modificare in modo programmatico le impostazioni del profilo ...

Ho scoperto che, mentre non possiamo (ancora) modificare le impostazioni del profilo, possiamo cambiare l'impostazione che stiamo usando (cambiare il profilo che è in uso, penso) - questo è qualcosa che ho trovato cercando informazioni, anche se dovrei dare credito a alishaik786 per il codice.

public final class LoadingScreen extends MainScreen implements FieldChangeListener 
    { 
     public LoadingScreen() 
    {   
     createGUI(); 
    } 

    private void createGUI() 
    { 
     try 
     {   
      ApplicationManager.getApplicationManager().launch("net_rim_bb_profiles_app"); 
     } 
     catch (Exception e) 
     { 
      //Exception 
     } 
    } 

    public void fieldChanged(Field field, int context) 
    { 

    } 
}