【发布时间】:2012-02-24 13:08:17
【问题描述】:
我正在尝试使来电静音并防止 BlackBerry 设备响铃。我尝试了 Alert.setVolume(0) 和一些 EventInjector 键,但这不起作用。
那么如何让来电静音呢?
【问题讨论】:
标签: blackberry java-me
我正在尝试使来电静音并防止 BlackBerry 设备响铃。我尝试了 Alert.setVolume(0) 和一些 EventInjector 键,但这不起作用。
那么如何让来电静音呢?
【问题讨论】:
标签: blackberry java-me
我对你的问题感到困惑,决定接受挑战。我尝试了不同的东西,包括
UiApplication.getUiApplication().getActiveScreen()入侵手机屏幕
最终,注入 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();
}
}
以下方法也有效(将callIncoming() 方法中的Muter 线程替换为以下代码)。
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));
}
});
【讨论】:
你won't be able to 以编程方式禁用声音(发现其他几个来源也说同样的话)。人们似乎想出的最佳解决方法是使用EventInjector 将手机的声音配置文件更改为静音。
【讨论】:
一些黑莓手机有静音键。你可以试试下面的思路:
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 */
}
}
【讨论】:
我对这一切都很陌生...但我认为我不妨投入我的 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)
{
}
}
【讨论】: