首页 » 黑莓开发 » [转]在呼叫屏幕上显示内容

[转]在呼叫屏幕上显示内容

9573 3

在运行 BlackBerry® Device Software 5.0 或更高版本的 BlackBerry® 设备上,通过使用 net.rim.blackberry.api.phone.phonegui 数据包中提供的电话屏幕 API,可将来电屏幕和当前呼叫屏幕自定义为显示内容。 例如,在 BlackBerry 设备用户接听特定呼叫方的电话时,可显示应用程序提供的信息。

设备将在呼叫屏幕下方显示内容。 如果多个应用程序提供呼叫屏幕内容,设备会按顺序将每个应用程序的内容大约显示两秒,直至显示下个呼叫屏幕。 例如,如果在来电屏幕显示内容,设备将显示内容,直至用户接听电话且当前呼叫屏幕显示。

BlackBerry® Java® SDK 中包括的“电话屏幕”示例应用程序演示如何使用此 API。

在电话屏幕上显示内容
在以下代码示例中,通过覆盖 AbstractPhoneListener.callIncoming(),将自定义内容添加至来电屏幕。 通过覆盖 callWaiting()、callInitiated() 和 callAnswered(),可在其他呼叫屏幕上显示内容。

开始之前: 在 BlackBerry® 设备启动时,确保以下示例应用程序在后台运行。 在 BlackBerry® Java® Plug-in for Eclipse® 中,更改示例应用程序的 BlackBerry 应用程序描述符。 有关详细信息,请参阅 《BlackBerry Java Plug-in for Eclipse Development Guide》。
导入所需的类和接口。
import net.rim.blackberry.api.phone.*;
import net.rim.blackberry.api.phone.phonegui.*;
import net.rim.device.api.system.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
通过扩展 Application 类,创建应用程序框架。 在构造器中,调用 Phone.addPhoneListener() 以注册在步骤 3 中创建的监听器。 在 main() 中,调用 enterEventDispatcher() 以让应用程序接收事件。
public final class MyPhoneScreen extends Application
{
public MyPhoneScreen()
{
Phone.addPhoneListener(new MyPhoneScreenContent());
}
public static void main(String[] args)
{
new MyPhoneScreen().enterEventDispatcher();
}
}
创建扩展 AbstractPhoneListener 类的类。 创建此新类的构造器。
final class MyPhoneScreenContent extends AbstractPhoneListener
{
public MyPhoneScreenContent()
{
}
}
在扩展 AbstractPhoneListener 的类中,覆盖 AbstractPhoneListener.callIncoming()。 创建 ScreenModel 类的实例。 通过调用 ScreenModel.getPhoneScreen(),获取来电屏幕的实例。 传入参数,以指定您要获取的呼叫屏幕方位和类型。 在以下代码示例中,获取了来电屏幕的纵向方位。 由于带触摸屏的设备支持纵向方位和横向方位,因此传入 PhoneScreen.LANDSCAPE 参数,以获取来电屏幕的纵向方位。
public void callIncoming(int callId)
{
ScreenModel screenModel = new ScreenModel(callId);
PhoneScreen phoneScreenPortrait = screenModel.getPhoneScreen(PhoneScreen.PORTRAIT, PhoneScreen.INCOMING);
}
在 callIncoming() 中,创建要添加至呼叫屏幕的自定义内容。 在以下代码示例中,通过使用标签字段,已将文本添加至来电屏幕。 覆盖 LabelField.paint() 以更改标签字段的颜色。
LabelField labelField1 = new LabelField(“Hello”)
{
public void paint(Graphics g)
{
g.setColor(Color.GREEN);
super.paint(g);
}
};
LabelField labelField2 = new LabelField(” to the World.”)
{
public void paint(Graphics g)
{
g.setColor(Color.RED);
super.paint(g);
}
};
在 callIncoming() 中,指定自定义内容的字体。 在以下代码示例中,将使用呼叫屏幕中的字体。 调用 PhoneScreen.getCallerInfoFont() 以获取呼叫屏幕使用的字体。 调用 Field.setFont() 并传入呼叫屏幕字体,以指定在步骤 5 中创建的标签字段的字体。 调用 PhoneScreen.add() 以将标签字段添加至呼叫屏幕。
labelField1.setFont(phoneScreenPortrait.getCallerInfoFont());
labelField2.setFont(phoneScreenPortrait.getCallerInfoFont());
phoneScreenPortrait.add(labelField1);
phoneScreenPortrait.add(labelField2);
在 callIncoming() 中,调用 ScreenModel.sendAllDataToScreen() 以将自定义内容添加至来电屏幕。
screenModel.sendAllDataToScreen();
代码示例:在电话屏幕上显示内容
import net.rim.blackberry.api.phone.*;
import net.rim.blackberry.api.phone.phonegui.*;
import net.rim.device.api.system.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
public final class MyPhoneScreen extends Application
{
public MyPhoneScreen()
{
Phone.addPhoneListener(new MyPhoneScreenContent());
}
public static void main(String[] args)
{
new MyPhoneScreen().enterEventDispatcher();
}
}
final class MyPhoneScreenContent extends AbstractPhoneListener
{
public MyPhoneScreenContent()
{
}
public void callIncoming(int callId)
{
ScreenModel screenModel = new ScreenModel(callId);
PhoneScreen phoneScreenPortrait = screenModel.getPhoneScreen(PhoneScreen.PORTRAIT, PhoneScreen.INCOMING);
LabelField labelField1 = new LabelField(“Hello”)
{
public void paint(Graphics g)
{
g.setColor(Color.GREEN);
super.paint(g);
}
};
LabelField labelField2 = new LabelField(” to the World.”)
{
public void paint(Graphics g)
{
g.setColor(Color.RED);
super.paint(g);
}
};
labelField1.setFont(phoneScreenPortrait.getCallerInfoFont());
labelField2.setFont(phoneScreenPortrait.getCallerInfoFont());
phoneScreenPortrait.add(labelField1);
phoneScreenPortrait.add(labelField2);
screenModel.sendAllDataToScreen();
}
}
在运行 CDMA 网络的设备上显示内容
在用户接听或拨打电话时,BlackBerry® 设备的电话应用程序将显示当前呼叫屏幕。 在用户接听电话后,用户可接听第二个电话。 在运行 CDMA 网络的设备上,第二个呼叫不会调用原始呼叫调用的事件。 对于这些设备,要在当前呼叫屏幕上显示自定义内容,必须覆盖 AbstractPhoneListener.callAnswered() 方法和 AbstractPhoneListener.callWaiting() 方法。

方法

说明

callAnswered()

要在第一个当前呼叫屏幕上显示内容,请覆盖 AbstractPhoneListener.callAnswered() 并获取当前呼叫的呼叫屏幕对象。 用户接听第一个电话时,电话应用程序将调用此方法。 在运行 GSM® 网络的设备上,在用户接听第一个电话和第二个电话时,电话应用程序将调用此方法。

callWaiting()

要在第二个当前呼叫屏幕上显示内容,请覆盖 AbstractPhoneListener.callWaiting() 并获取当前呼叫的呼叫屏幕对象。 用户接听第二个电话时,电话应用程序将调用此方法。

代码示例:在运行 CDMA 网络的设备上显示内容

以下代码示例演示如何覆盖 AbstractPhoneListener.callWaiting()。 通过使用 RadioInfo 类,可检查设备是否运行 CDMA 网络。 通过调用 ScreenModel.getPhoneScreen() 并传入 PhoneScreen.ACTIVE,以便仅指定第二个电话的内容,可获取当前呼叫屏幕的实例。

public void callWaiting(int callId)
{
// For CDMA devices, specify the content for the active call screen
if((RadioInfo.getSupportedWAFs() & RadioInfo.WAF_CDMA) != 0)
{
ScreenModel screenModel = new ScreenModel(callId);
PhoneScreen phoneScreenPortrait = screenModel.getPhoneScreen(PhoneScreen.PORTRAIT, PhoneScreen.ACTIVE);
PhoneScreen phoneScreenLandscape = screenModel.getPhoneScreen(PhoneScreen.LANDSCAPE, PhoneScreen.ACTIVE);
}
// For GSM and CDMA devices, specify the content for the incoming call screen
}

原文地址:http://docs.blackberry.com/en/developers/deliverables/25129/Displaying_content_on_a_phone_screen_zh-cn_1342065_11.jsp

文章评分1次,平均分5.0

本文原始地址:https://www.tiandiyoyo.com/2011/12/%e8%bd%ac%e5%9c%a8%e5%91%bc%e5%8f%ab%e5%b1%8f%e5%b9%95%e4%b8%8a%e6%98%be%e7%a4%ba%e5%86%85%e5%ae%b9/
本站所有文章,除了特别注明外,均为本站原创,转载请注明出处来自www.tiandiyoyo.com

您可能还会对以下文章感兴趣:

评论前先开启评论开关:


3 Comments

  1. 然若游 :

    就是用这个实现来去电归属地显示的么?

载入分页评论...