Как заставить замолчать входящий звонок - PullRequest
7 голосов
/ 24 февраля 2012

Я пытаюсь заставить замолчать входящий вызов и запретить звонки устройства BlackBerry.Я попытался Alert.setVolume (0) и некоторые клавиши EventInjector, но это не сработало.

Так как же заставить замолчать входящий звонок?

Ответы [ 4 ]

6 голосов
/ 13 марта 2012

Я был озадачен вашим вопросом и решил принять вызов. Я пробовал разные вещи, включая

  1. Воспроизведение аудиофайла "тишина" в надежде перекрыть сигнал устройства или занять медиаплеер
  2. Взлом экрана телефона через UiApplication.getUiApplication().getActiveScreen()
  3. Внедрение событий клавиатуры

В конце концов, добавление события VOLUME UP (также работает клавиша VOLUME DOWN) сработало для меня и отключило звук устройства при входящем звонке. Недостаток этого подхода состоит в том, что иногда устройство звонило в течение доли секунды, прежде чем отключить звук.

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();
    }
}

Также работает следующее (замените нить Muter в методе callIncoming() на следующий код).

        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));
            }
        });
3 голосов
/ 24 февраля 2012

Вы не сможете отключить звук программным способом (обнаружил пару других источников, которые говорили то же самое). Лучшим обходным путем, который, похоже, нашли люди, было использование EventInjector для изменения профиля звука телефона на бесшумный.

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

У некоторых телефонов Blackberry есть ключ отключения звука. Вы можете попробовать следующую идею:

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 голосов
/ 14 марта 2012

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

Я пытался найти способы программно изменить настройки профиля ...

я обнаружил, что, хотя мы не можем (пока) изменить настройки профиля, мы можем изменить настройку, которую мы используем (я думаю, измените профиль, который используется) - это то, с чем я столкнулся в поиске информации. хотя я должен отдать должное alishaik786 за код.

    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)
    {

    }   
}
...