Android系统定时开关飞行模式代码的实现

2012-04-29 00:44张亮
电脑知识与技术 2012年32期
关键词:编程

张亮

摘要:基于Android操作系统的智能手机目前在市场上的占有率排名第一,然而,Android系统官方并没有提供定时自动开关机的功能,并且,很多品牌的Android手机并不具备关机闹钟功能,因此,很多人使用打开飞行模式来取代关机操作。该文介绍了一种编程方法,可以根据设定的时间自动打开或关闭飞行模式,在一定程度上可以解决对自动开关机功能的需求。

关键词:Android;飞行模式;编程

中图分类号:TN929 文献标识码:A 文章编号:1009-3044(2012)32-7743-02

Android操作系统是Google公司于2007年发布的一种智能手机操作平台,它是一个由操作系统、中间件、用户友好界面和应用软件组成的,全面整合的移动软件平台。自推出以来,Android受到了业界的广泛关注,基于Android的智能手机的发展也极其迅猛,目前在智能手机的市场占有率已经稳居第一。然而遗憾的是,Android系统并没有提供定时自动开关机功能,因此,习惯夜晚关机的用户必须每日晚上手动进行关机操作,次日早晨再手动开机,比较繁琐。另外,很多厂商开发的基于Android系统的手机并不支持关机闹钟功能,一旦关机后,设定的闹钟就不再起作用,给用户带来很多不便。因此,越来越多的用户目前倾向使用启用飞行模式来代替关机操作,因为在飞行模式下,闹钟是可用的。但系统同样没有提供定时自动开关飞行模式的设置选项,该文的目的就是介绍如何自主编程开发这一功能。

1飞行模式简介

手机的飞行模式又叫航空模式、航班模式。飞行模式打开后,将关闭手机的通信功能,即不能接打电话发短信,与基站没有信号联系,也不试图联系基站。同时手机的移动数据网络和WIFI模块也会被关闭。因为手机信号会干扰飞机上的电子设备,所以飞机上不允许打开手机,而在飞行模式下关闭了手机信号的有关功能,手机可以开着继续使用其它功能,如查看电话本、欣赏手机上的文章、电影等。所以叫这种模式被称为飞行模式。因为手机的电量很大部分都消耗在无线信号通信上,飞行模式下关闭了所有无线信号通信,因此非常省电。

2代码实现

本系统手机客户端开发环境为Android2.3,采用JDK1.6版和Eclipse3.7来编程实现。

代码主要由两个类组成:AirplaneModeSwitchActivity类和AlarmReceiver类。其中AirplaneModeSwitchActivity类是Activity类的子类,用来实现程序主界面,主要用来设置定时开关的时间和启动关闭程序等功能。AlarmReceiver类是BroadcastReceiver类的子类,主要用来响应AlarmManager发出的广播intent,并执行打开或关闭飞行模式的代码。

由于打开和关闭飞行模式的代码流程几乎一致,下面以打开飞行模式为例介绍一下具体的编程步骤:

1)在主界面上设置TimePicker控件来设置打开飞行模式的时间。TimePicker继承了FrameLayout类,可以向用户显示一天中的时间(可以为24小时,也可以为AM/PM制),并允许用户进行选择。

2)通过GregorianCalendar类的默认构造方法取得当前系统的时间,并利用当前时间的年月日加上TimePicker控件中设置的小时和分钟构造出打开飞行模式的时间。需要特别注意的是,此时需要比较此时间和当前系统时间的先后,如何当前系统时间已经晚于此时间,说明用户设置的是第二天这个时候自动打开飞行模式,因此需要将此时间的日期加1。

3)设置Intent和PendingIntent对象,Intent一般是用作Activity、Sercvice、BroadcastReceiver之间传递数据,PendingIntent可以看作是对Intent的包装,通常通过getActivity,getBroadcast,getService来得到pendingintent的实例,当前activity并不能马上启动它所包含的intent,而是在外部执行pendingintent时,来调用封装的intent的。我们这里设置的Intnent指向AlarmReceiver类,用来当AlarmManager设定时间到达的时候发出广播。

4)设置AlarmManager对象。AlarmManager的作用是:在特定的时刻为我们广播一个指定的Intent。简单的说就是我们设定一个时间,然后在该时间到来时候,AlarmManager为我们广播一个我们设定的Intent。我们通过该对象的setRepeating方法来设置一个重复的定时器,重复时间为24小时,也就是每天相同的时间打开飞行模式。需要注意的是,我们开始时尝试使用Timer定时器类来实现相同的功能,但经过实践发现,Timer类定时器在手机进入待机状态时就不再起作用,因此不适合用在这样的场合使用。

5)当定时器发出广播后,由AlarmReceiver类负责处理。要实现这一点,必须在项目的AndroidManifest.xml文件中加入代码进行说明。AlarmReceiver类是BroadcastReceiver类的子类,该类对父类的onReceive方法进行了覆盖,自定义了当接收到广播时进行的处理代码。在这里通过Settings.System.putString(cr,Settings.System.AIRPLANE_MODE_ON,"0")方法就可以将飞行模式打开,之后通过广播Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED)通知系统飞行模式的状态已经发生了改变。

3结束语

Android系统作为目前最为流行的智能手机操作系统,在各方面的性能都比较优秀,然而,缺乏对自动开关机功能和关机闹钟功能的支持是一大遗憾。该文分析飞行模式的原理,探讨了用飞行模式取代关机的可能性,并给出了实现定时自动开关飞行模式的代码实现,希望对Android系统的研究产生一定的参考作用。

参考文献:

[1]郭蕊.基于Android平台的GPS定位系统的设计与实现[J].北京工业职业技术学院学报,2012,11(2).

[2]倪红军.基于Android平台的移动终端GPS研究[J].计算机技术与发展,2012(5).

[3]百度百科.GPS工作原理[EB/OL].http://baike.baidu.com/view/7773.htm.

猜你喜欢
编程
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
纺织机上诞生的编程
宏程序编程的几种应用
数据库中VB编程的应用