基于Android的安全短信系统研究外文翻译资料
2022-10-16 15:59:29
英语原文共 37 页,剩余内容已隐藏,支付完成后下载完整资料
PROFESSIONAL
Androidtrade; 4 Application Development
目录
17.2.4 使用PhoneStateListener监视电话状态的变化 9
17.2.5 使用Intent Receiver监视传入的电话呼叫 15
17.3.2 使用Intent从应用程序中发送SMS和MMS 17
17.3.3 使用 SMS Manager 发送 SMS 消息 18
- 电话服务和SMS
本章内容
1、启动电话呼叫
2、读取电话、网络、数据连接以及SIM状态
3、监视电话、网络、数据连接以及SIM状态的变化
4、使用Intent发送SMS和MMS消息
5、使用SMS Manager发送SMS消总
6、处理传入的SMS消息
在本章中,你将学习如何使用Android的电话服务API来监视移动语音、数据连接和传入及传出的呼叫,以及如何使用电话服务API来发送和接收SMS(短消息服务)消息。
通过学用于监视电话状态和电话呼叫的电话服务包,还有发起呼叫和监视传入呼叫的详细信息,你将了解通信的硬件。
Android还支持对SMS功能的完全访问,允许在自己的应用程序中发送并接收SMS消息。使用AndroidAPI,你可以创建自己的SMS客户端应用程序来代替软件栈中的本机客户端。此外之外,还可以在自己的应用程序中加入消息传输功能。
17.1 电话服务的硬件支持
随着只支持WfFi的Android设备出现,你不能再假定运行你的应用程序的所有硬件都支持电话服务。
17.1.1 指定电话服务作为必须的硬件功能
一些应用程序在不支持电话的设备上没有任何意义。一个提供反向电话号码查找或者替代SMS客户端的应用程序在只支持Wi-Fi服务的设备上是无法工作的。
为了指定应用程序需要设备支持电话服务.需要在应用程序的manifest文件中添加一个uses-feature 节点:
lt;uses-feature android:name=”android.hardware.telephony”
android:required=”true”/gt;
提示:通过将电话服务标记为必需功能,可以防止应用程序出现在没有电话硬件设备的Google Play中.也能过防止这样的设备通过Google Play网站安装该应用程序。
17.1.2 检查你的电话硬件
如果你在应用程序中使用了电话服务API,但是它们并不是严格需要使用的,那么可以在试图使用相关API之前,检查设备是否有电话硬件。
为此,需要使用 PackageManager 的 hasSystemFeature 方法,并指定 FEATURE_TELEPHONY 功能。PackageManager还可以用于查询特定于CDMA和GSM的硬件是否存在的常量。
PackageManager pm = getPackageManager();
boolean telephonySupported =
pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
boolean gsmSupported =
pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_CDMA);
boolean cdmaSupported =
pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_GSM);
在应用程序生命周期的早期检查是否支持电话服务并适当地调整应用程序的UI和行为是比较好的做法。
17.2 使用电话服务
安卓电话服务API让您的应用程序访问底层的电话硬件堆栈,它可以创造你自己的拨号器或集成呼叫处理和手机状态监测到你的应用程序。
提示:出于安全考虑,目前的Android SDK不允许用户创建您自己的in-call Activity--当接到一个来电或者拨打电话时所显示的屏幕。
下面的章节集中在如何监视和控制电话、服务和蜂窝事件,从而增加和管理本地电话的处理功能。你可以用同样的技术实现一个拨号应用程序。
17.2.2 启动电话呼叫
启动电话呼叫的最好做法是使用一个IntentACTION_DlAL Intent,并通过使用td:模式设罝 Intent数据来指定要拨打的号码:
Intent whoyougonnacall = new Intent(Intent.ACTION_DIAL,
Uri.parse(“tel:555-2368”));
startActivity(whoyougonnacall);
这会启动一个拨号程序Activity,它应该已经预先设置了你所指定的号码。默认的拨号程序 Activity允许用户在显式发起呼叫之前修改要拨打的号码。因此,使用ACTION_DIAL Intent动作并不霈要任何特殊权限。
通过使用一个Intent来说明想要拨号,可以使应用程序与用来启动呼叫的拨号程序的实现保持分离。例如,如果用户安装了一个支持IP电话的新拨号程序,那么在应用程序中使Intent进行拨号就可以让用户使用这个新的拨号程序。
17.2.2 替换本机拨号程序
取代本机拨号应用涉及到两个步骤:
1.拦截本机拨号应用服务的Intent
2.发起和管理打出的电话
本机拨号应用程序响应与用户按下硬件呼叫按钮对应的Intent动作,它要求使用tel:模式查看数据,或者使用tel:模式发出一个ACT10N_D1AL请求。
要拦截这些请求,需要在你的替换拨号程序Activity的manifest文件中包含intent-filter标签来监听以下动作:
Intent.ACTION_CALL_BUTTON-按下设备的硬件呼叫按钮时,这个动作将被广播。创建一个监听该动作的Intent Filter作为默认动作。
Intent.ACTION_DIAL-这个Intent动作已经在上一节中描述过,它由想要启动电话呼叫的应用程序使用。用于捕获该动作的Intent Filter应当是默认并且可浏览的(以提供来自浏览器的拨号请求),并且必须指定tel:模式来代替已经存在的拨号功能(尽管它能够支持其他的机制)。
Intent.ACTION_VIEW-这个查看动作被想要查看某条数据的应用程序使用。确保Intent Filter指定了tel:模式以允许新的Activity用于査看电话号码。
程序淸单17-1中的manifest文件的代码段显示了一个Activity,它使用的Intent Filter将捕获每个动作。
程序清单17-1,替换你的拨号程序Activity的manifest条目
lt;activity
android:name=”.MyDialerActivity”
android:label=”@string/app_name”gt;
lt;intent-filtergt;
lt;action android:name=”android.intent.action.CALL_BUTTON” /gt;
lt;category android:name=”android.intent.category.DEFAULT” /gt;
lt;/intent-filtergt;
lt;intent-filtergt;
lt;action android:name=”android.intent.action.VIEW” /gt;
lt;action android:name=”android.intent.action.DIAL” /gt;
lt;category android:name=”android.intent.category.DEFAULT” /gt;
lt;category android:name=”android.intent.category.BROWSABLE” /gt;
lt;data android:scheme=”tel” /gt;
lt;/intent-filtergt;
lt;/activitygt;
代码片段PA3AD_Ch17_Replacement_Dialer/AndroidManifest.xml
Activity启动后,它应该提供一个UI来允许用户输入或者修改要拨打的号码,以及启动传出呼叫。这时,你就需要使用现有的电话服务堆或者你自己的拨号程序来拨打电话了。
最简单的技术是通过Intent.ACTIOhL CALL动作使用现有的电话服务堆栈,像程序淸单17-2示例。
程序清单17-2 :使用系统电话服务栈来拨打电话
Intent whoyougonnacall = new Intent(Intent.ACTION_CALL,
Uri.parse(“tel:555-2368”));
startActivity(whoyougonnacall);
代码片段 PA3AD_Ch17_Replacement_Dialer/AndroidManifest.xml
这将使用系统的incall-Activity来启动呼叫,并让系统管理拨号、连接以及语音处理。
要使用该动作,应用程序必须请求CALI-PHONE uses-pcmiission :
lt;uses-permissionandroid:name=”android.permission.CALL_PHONE”/gt;
或者,你还可以通过实现自己的拨号以及语音处理框架来完全替换传出的电话服务栈。如果你要实现一个VOBP(voiceoverIP)应用程序,那么这是最好的取代方法。
还要注意,可以使用前面的技术来截获传出的呼叫Intent和修改拨打的号码,或者阻止传出的呼叫,作为完全取代拨号程序的一种方法。
17.2.3 访问电话服务属性和状态
Telephony Manager管理对电话服务API的访问,使用getSystemScivice方法可以实现访问:
String srvcName = Context.TELEPHONY_SERVICE;lt;
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[151180],资料为PDF文档或Word文档,PDF文档可免费转换为Word