android内置闹铃功能的简单介绍

 本文通过对android内置闹铃功能的简单介绍,来让开发者朋友们了解基于OPhone平台下客户/服务模式的编程模型,以及如何使用OPhone 系统提供的闹铃唤醒功能。与此同时,本文还对PendingIntent做一些简单的介绍,并通过实例程序来演示如何通过PendingIntent将闹 钟应用程序和系统闹铃服务联系起来。
  一、闹铃功能
  闹钟应用程序作为人 们日常常用的基本应用程序之一,其重要性不言而喻。在OPhone系统中闹铃服务功能不仅仅对闹钟应用程序服务,最重要的是可以利用该闹铃服务功能提供的 唤醒能力来做定时器。这样即便应用程序没有运行或者是没有启动的情况下,只要其注册过闹铃,那么该闹铃到时间后,OPhone系统可以自动将该应用程序启 动,这就是所谓的闹铃“唤醒“功能。
  在OPhone系统中,底层系统提供了两种类型的时钟,软时钟与硬时钟,软时钟就是我们常说的 Timer,硬时钟就是RTC。系统在正常运行的情况下,Timer工作提供时间服务和闹铃提醒,而在系统进入睡眠状态后,时间服务和闹铃提醒由RTC来 负责。对于上层应用来说,我们并不需要关心是 timer还是RTC为我们提供服务,因为OPhone系统的Framework层把底层细节做了封装并统一提供API。这个API他的名字就叫 AlarmManager。在OPhone系统中有意思的是对应AlarmManage有一个AlarmManagerServie服务程序,该服务程序 才是正真提供闹铃服务的,它主要维护应用程序注册下来的各类闹铃并适时的设置即将触发的闹铃给闹铃设备(在OPhone系统中,linux实现的设备名为 ”/dev/alarm”),并且一直监听闹铃设备,一旦有闹铃触发或者是闹铃事件发生,AlarmManagerServie服务程序就会遍历闹铃列表 找到相应的注册闹铃并发出广播。该服务程序在系统启动时被系统服务程序system_service启动并初始化闹铃设备(/dev/alarm)。当 然,在JAVA层的AlarmManagerService与Linux Alarm驱动 程序接口之间还有一层封装,那就是JNI。
   AlarmManager将应用与服务分割开来后,使得应用程序开发者不用关心具体的服务,而是直接通过AlarmManager来使用这种服务。这也 许就是客户/服务模式的好处吧。AlarmManager与AlarmManagerServie之间是通过Binder来通信 的,他们之间是多对一的关系。在OPhone系统中,AlarmManage提供了3个接口5种类型的闹铃服务:
3个API调用接口:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->void       cancel(PendingIntent operation)
     // 取消已经注册的与参数匹配的闹铃
    void       set ( int type, long triggerAtTime, PendingIntent operation)
     // 注册一个新的闹铃
    void      setRepeating( int type, long triggerAtTime, long interval, PendingIntent operation)
     // 注册一个重复类型的闹铃
    void      setTimeZone( String timeZone)
     // 设置时区
5种闹铃类型:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->public static final int ELAPSED_REALTIME
         // 当 系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是相对时间,是从系统启动后开始计时的,包括睡眠时间, 可以通过调用SystemClock.elapsedRealtime()获得。系统值是3    (0x00000003)。
         public static final int ELAPSED_REALTIME_WAKEUP
         // 能唤醒系统,用法同ELAPSED_REALTIME,系统值是2 (0x00000002) 。
         public static final int RTC
         // 当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是绝对时间,所用时间是UTC时间,可以通过调用 System.currentTimeMillis()获得。系统值是1 (0x00000001) 。
         public static final int RTC_WAKEUP
         // 能唤醒系统,用法同RTC类型,系统值为 0 (0x00000000) 。
         Public static final int POWER_OFF_WAKEUP
         // 能唤醒系统,它是一种关机闹铃,就是说设备在关机状态下也可以唤醒系统,所以我们把它称之为关机闹铃。使用方法同RTC类型,系统值为4(0x00000004)。
  开发者可以通过OPhone SDK来获取更多AlarmManager的相关细节,他所在的包是:Android.app.AlarmManager
  随着OPhone系统版本的不断的升级,这些接口和闹铃类型也许会有些调整,但其基本使用方法将不会改变
 二、闹钟设置与提醒
  我们首先通过一个直观的UI来感受一下OPhone系统内嵌的闹钟程序是如何响应用户设置和自动提醒的的:(如下4个图所示)

上面4图直观的告诉了开发者如何使用OPhone内嵌的闹钟应用程序,但开发者可能更关心的是通过代码如何实现这些功能。比如说怎么设置一个闹铃,该设置哪种类型的闹铃,以及如何获得闹铃时间已到并提醒用户。依据这几个问题,我们在下面的章节中逐步来介绍。
 2.1 设置闹铃
  在第一小节中,我们已经提到过OPhone系统AlarmManagerService提供了两个设置闹铃的API,他们分别是:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->        void       set ( int type, long triggerAtTime, PendingIntent operation)
        void      setRepeating( int type, long triggerAtTime, long interval, PendingIntent operation)
  在OPhone 1.5版本中又增加了一个API。
  下面的程序演示了如何设置一个闹铃。
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/ 当设置的闹铃触发时,Ophone系统会广播一个Intent,当然我们需要在创建一个新的闹铃
     // 时注册一个闹铃事件接收对象AlarmReceiver ,该接收对象也可以通过在 // AndroidManifest.xml中发布,也可以在代码中动态注册。
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.SystemClock;
import android.os.Bundle;
import java.util.Calendar;
// 创建一个PendingIntent
Intent intent = new Intent(ALARM_ALERT_ACTION);
intent.putExtra(ID, id);
intent.putExtra( TIME , atTimeInMillis);
PendingIntent sender = PendingIntent.getBroadcast(
                context, 0 , intent, PendingIntent.FLAG_CANCEL_CURRENT);
// 获得AlarmMnager并注册一个新闹铃,
// 一次性闹铃的设置
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.set(AlarmManager.POWER_OFF_WAKEUP, atTimeInMillis, sender);
// 重复性闹铃的设置
// We want the alarm to go off 30 seconds from now .
long firstTime = SystemClock.elapsedRealtime();
firstTime += 15 * 1000 ;
// Schedule the alarm!
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.POWER_OFF_WAKEUP,
                            firstTime, 15 * 1000 , sender);

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->// 在AndroidManifest.xml中注册
receiver android:name = " AlarmReceiver " >
              intent - filter >
                action android:name = " com.android.alarmclock.ALARM_ALERT " />
              intent - filter >
receiver >

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->// 在应用程序执行过程中注册
AlarmReceiver mAlarmReceiver;
IntentFilter filter = new IntentFilter();
filter .addAction(“com.android.alarmclock.ALARM_ALERT”);
context.registerReceiver(mAlarmReceiver, filter );
public class AlarmReceiver extends BroadcastReceiver {
    @Override
     public void onReceive(Context context, Intent intent) {
     
   }
}
2.2 闹铃提醒
  在OPhone系统中,当应用程序所设置的闹铃时间到了后,OPhone系统中的 AlarmManagerService就会从系统底层获取一个闹铃事件并从自己维护的队列中取出其匹配的闹铃,然后通过其应用注册的 PendingIntent把该闹铃事件发送回给应用。
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->   PendingIntent.send();
  当我们的应用收到该Intent后就会启动相应的Activity来提醒用户闹铃时间到。
  程序代码如下:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->package com.android.alarmclock;
import android.content.Context;
import android.content.Intent;
import android.content.BroadcastReceiver;
import android.os.Handler;
import android.os.PowerManager;
import android.os.SystemClock;
public class AlarmReceiver extends BroadcastReceiver {
    @Override
     public void onReceive(Context context, Intent intent) {
         long now = System.currentTimeMillis();
         int id = intent.getIntExtra(Alarms.ID, 0 );
         long setFor = intent.getLongExtra(Alarms.TIME, 0 );
        Intent fireAlarm = new Intent(context, AlarmAlert.class);
        fireAlarm.putExtra(Alarms.ID, id);
        fireAlarm.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         // 启动一个新的UI对象来提醒
        context.startActivity(fireAlarm);
   }
}
 三、PendingIntent
  在前面的章节中,我们在注册闹铃、发送闹铃事件的时候,有过一个重要的参数 PendingIntent。这个PendingIntent可以说是 Intent的进一步封装,他既包含了Intent的描述又是Intent行为的执行(这种定义也许不太严格),如果将Intent比作成一个订单的 话,PendingIntent更像是一个下订单的人,因为它既要负责将订单发出去,也要负责订单发送后的处理,比如发送成功后要准备验收订单货物,发送 失败后要重发还是取消订单等操作。开发者可以通过调用getActivity(Context, int, Intent, int), getBroadcast(Context, int, Intent, int), getService(Context, int, Intent, int)函数来得到一个PendingIntent实例。
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->public static PendingIntent getBroadcast(Context context, int requestCode, Intent intent, int flags)
    通过该函数获得的PendingIntent将会扮演一个广播的功能,就像调用 Context.sendBroadcast()函数一样。当系统通过它要发送一个intent时要采用广播的形式,并且在该intent中会包含相应的 intent接收对象,当然这个对象我们可以在创建PendingIntent的时候指定,也可以通过ACTION 和CATEGORY等描述让OPhone系统自动找到该行为处理对象。
  实例代码如下:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->Intent intent = new Intent(AlarmController.this, OneShotAlarm.class);
PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this,
                     0 , intent, 0 );
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->Public static PendingIntent getActivity(Context, int , Intent, int )
   通过该函数获得的PendingIntent可以直接启动新的activity, 就像调用 Context.startActivity(Intent)一样.不过值得注意的是要想这个新的Activity不再是当前进程存在的Activity 时。我们在intent中必须使用Intent.FLAG_ACTIVITY_NEW_TASK.
  实例代码如下:  
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->// The PendingIntent to launch our activity if the user selects this notification
PendingIntent contentIntent = PendingIntent.getActivity(this, 0 ,
                             new Intent(this, AlarmService.class), 0 );

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->public static PendingIntent getService(Context context, int requestCode, Intent intent, int flags)
  通过该函数获得的PengdingIntent可以直接启动新的Service,就像调用Context.startService()一样。
  实例代码如下:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->   // Create an IntentSender that will launch our service, to be scheduled
     // with the alarm manager.
    mAlarmSender = PendingIntent.getService(AlarmService.this,
                 0 , new Intent(AlarmService.this, AlarmService_Service.class), 0 );

 四、PendingInent与 service
  在OPhone系统编程中,一个完整OPhone应用程序可以有4个需要创建的模块,他们分别是:
   Activity ,Broadcast intent Receiver,Service,Content Provider。Service作为一个OPhone应用程序组成部分,通常运行在系统后台,他与用户之间没有交互。像其他应用程序对象一样运行在所属 进程的主线程中。那么这就意味着它有可能进入长时间的运行等待而导致应用得不到用户的相应。所以在开发者设计程序的时候就要考虑,如果一个Service 要做一些长时间的数据处理时(比如播放MP3 ,或者是网络 下载),就需要把该工作切换到自己的线程空间来执行。
  实例代码如下:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.os.Parcel;
import android.os.RemoteException;
import android.widget.Toast;
// 定义一个 Service 对象
public class AlarmService_Service extends Service {
    NotificationManager mNM;
     public void onCreate() {
         // 创建一个线程来运行Runnable
        Thread thr = new Thread( null , mTask, " AlarmService_Service " );
        thr.start();
    }
     public void onDestroy() {
    }
    Runnable mTask = new Runnable() {
         public void run() {
             // 通常我们就可以在这里设计长时间运行的功能,
             long endTime = System.currentTimeMillis() + 15 * 1000 ;
             while (System.currentTimeMillis()  endTime) {
                synchronized (mBinder) {
                    try {
                        mBinder.wait(endTime - System.currentTimeMillis());
                    } catch (Exception e) {
                    }
                }
            }
             // 停止Service
            AlarmService_Service.this.stopSelf();
        }
    };
     // 在编写Service代码时,可以不实现onStart,onStop等函数,但一定要实现onBind函数
     public IBinder onBind(Intent intent) {
        return mBinder;
    }
     /*   通过该对象可以与客户端通信
     */
     private final IBinder mBinder = new Binder() {
        @Override
        protected boolean onTransact( int code, Parcel data, Parcel reply,
                 int flags) throws RemoteException {
            return super.onTransact(code, data, reply, flags);
        }
    };
}
  小结: 本 篇文章主要介绍了如何使用AlarmManager的定时唤醒功能,以及各种闹铃的含义与API使用实例,希望对读者朋友们在OPhone应用编程中,对 AlarmManager的正确使用起到抛砖引玉的作用。同时我们还引入了一个重要的概念 PendingIntent,通过对PendingIntent参数的解析,相信读者朋友们对PendingIntent的使用有了一个基本的认识。

原文地址:http://www.anzhiwo.com/bbs/viewthread.php?tid=339592 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容简介   《google android sdk开发范例大全(第3版)》在上一版的基础上,以android手机应用程序开发(采用android sdk 2.3.3)为主题,超过200多个范例全面且深度地整合了手机、网络及服务等多个开发领域,为读者提高程序设计能力提供了很大的帮助。    全书共分11章,主要以范例集的方式来讲述android的知识点,详细介绍了开发android的人机交互界面、android常用的开发控件、android手机收发短信等通信服务、开发android手机的自动服务功能和娱乐多媒体功能以及整合android与google强大的网络服务等内容。随书光盘中包括了所有范例的程序代码。    《google android sdk开发范例大全(第3版)》继承前两版由浅入深的方式,范例总数由原先的160多个增加到了200多个,在用户交互界面、手机控件、交互式通信服务、手机自助服务、娱乐多媒体等方面均增加了相应的范例来介绍新的开发技术,特别是新增加了第11章来专门介绍html5技术在android移动设备里的应用,相信当下两个热门技术的交汇会碰撞出不一样的火花。    《google android sdk开发范例大全(第3版)》内容由android的基础知识到实际开发应用,结构清晰、语言简洁,非常适合android的初学者和android的进阶程序开发者阅读参考。 目录 《google android sdk开发范例大全(第3版)》 第1章 了解、深入、动手做 1 1.1 红透半边天的android 2 1.2 本书目的及范例涵盖范围 3 1.3 如何阅读本书 4 1.4 使用本书范例 5 1.5 参考网站 6 第2章 android初体验 7 2.1 安装android sdk与adt/ddms 8 2.2 创建第一个android项目(hello android!) 11 2.3 android应用程序架构——从此开始 15 2.4 可视化的界面开发工具 18 2.5 部署应用程序到android手机 19 第3章 用户人机界面 22 3.1 更改与显示文字标签 23 3.2 更改手机窗口画面底色 24 3.3 更改textview文字颜色 26 3.4 置换textview文字 28 3.5 取得手机屏幕大小 29 3.6 样式化的定型对象 30 .3.7 简易的按钮事件 32 3.8 手机页面的转换 34 3.9 调用另一个activity 37 3.10 不同activity之间的数据传递 41 3.11 返回数据到前一个activity 44 3.12 具有交互功能的对话框 49 3.13 置换文字颜色的机关 51 3.14 控制不同的文字字体 52 3.15 如iphone拖动相片特效 54 3.16 自制计算器 56 3.17 关于(about)程序信息 58 3.18 程序加载中,请稍候 61 3.19 全屏幕以按钮重写 63 3.20 今晚到哪儿打牙祭 64 3.21 android变脸 67 3.22 打勾显示输入的密码 69 3.23 android多语系支持 71 3.24 判断手机操作系统版本是否允许运行程序 72 3.25 两个不同的程序彼此调用 75 3.26 指定安装应用程序迁移至sd卡 78 3.27 手机动态layout主题随手势物换迁移 79 第4章 史上超豪华的手机控件 84 4.1 edittext与textview共舞 85 4.2 设计具有背景图的按钮 86 4.3 给圣诞老人的信息 88 4.4 我同意条款 90 4.5 消费券采购列表 92 4.6 向左或向右 94 4.7 专业相框设计 96 4.8 自定义下拉菜单模式 99 4.9 动态添加/删除的spinner菜单 102 4.10 心爱小宝贝相片集 104 4.11 快速地搜索手机文件引擎 107 4.12 按钮也能随单击变换 109 4.13 具自动提示功能的菜单 110 4.14 数字及模拟小时钟设计 112 4.15 动态输入日期与时间 114 4.16 猜猜红桃a在哪儿 117 4.17 后台程序运行进度提示 121 4.18 动态文字排版 124 4.19 在activity里显示列表 128 4.20 以动态列表配置选项 130 4.21 查找程序根目录下所有文件 134 4.22 加载手机磁盘里的图片文件 137 4.23 动态放大缩小imageview里的图片 139 4.24 动态旋转图片 142 4.25 猜猜我在想什么 145 4
本书以Android应用程序的开发为主题,并结合真实的案例向读者详细介绍Android的基本组件的使用及应用程序开发的整个流程。本书的讲述由浅入深,实例全面并典型,几乎囊括了所有和Android应用相关的项目。全书分为18章,分别讲解了UI布局实例集锦、控件实例集锦、自动化服务实例集锦、数据存储实例集锦、电话和短信实例集锦、图形图像实例集锦、和网络有关的实例集锦、多媒体实例集锦、Google地图实例集锦、GoogleAPI实例集锦、平板应用实例集锦、游戏应用与程序优化。并且在本书最后,通过4个大型综合实例,分别介绍了开发手机地图系统、音乐播放器系统、NBA激情投篮游戏、综合邮件系统的基本过程。 目录: 第1章 UI布局开发实例集锦 1 实例001: 使用线性布局(LinearLayout) 来布局屏幕 1 实例002: 使用相对布局(RelativeLayout)来布局屏幕 3 实例003: 使用表格布局(TableLayout) 来布局屏幕 5 实例004: 使用绝对布局(AbsoluteLayout) 来布局屏幕 6 实例005: 使用标签布局(TabLayout)来 布局屏幕 8 实例006: 使用层布局(FrameLayout) 10 实例007: 创建一个桌面组件Widget 11 实例008: 在屏幕中实现一个按钮效果 12 实例009: 在屏幕中显示文字 13 实例010: 在屏幕中显示编辑框 17 实例011: 在屏幕中显示复选框 18 实例012: 在屏幕中显示单选框 21 实例013: 在屏幕中显示下拉列表框 22 实例014: 在屏幕中实现自动输入文本 效果 26 实例015: 使用日期选择器控件DatePicker 28 实例016: 自动选择一个输入时间 30 实例017: 实现屏幕自动滚动 32 实例018: 实现一个进度条效果 32 实例019: 开发一个评分程序 35 实例020: 在屏幕中显示一幅指定的图片 36 实例021: 设置一幅图片作为按钮来使用 38 实例022: 实现QQ空间中的显示照片 效果 40 第2章 控件开发实例集锦 44 实例023: 显示在文本框中输入的信息 44 实例024: 使用RadioGroup控件实现选 项选择功能 46 实例025: 使用CheckBox控件实现同意 条款效果 48 实例026: 使用Spinner控件实现选项选择 51 实例027: 使用Gallery控件实现个人相 簿功能 55 实例028: 开发一个文件搜索程序 58 实例029: 单击按钮后实现按钮置换 60 实例030: 模拟实现一个时钟界面效果 62 实例031: 联合使用DatePicker和TimePicker 来选择日期和时间 65 实例032:动态分隔手机屏幕 68 实例033:使用ListActivity实现动态菜单 列表 71 实例034:加载手机磁盘中的文件 73 实例035:实现抽屉样式效果 76 实例036:在屏幕中动态显示多种对话框 82 实例037:手机秘书--重要事情提醒 88 实例038:动态添加或删除菜单 96 实例039: 自定义Android控件实现单选 按钮 100 实例040: 使用自定义控件在屏幕中绘 制一条虚线 104 实例041: 在屏幕中实现手风琴效果 106 第3章 自动化服务实例集锦 109 实例042: 自动获取手机屏幕的分辨率 109 实例043: 自动获取手机电池的剩余电量 112 实例044: 来电时自动发送信息提醒 115 实例045: 获取手机存储卡的容量 119 实例046: 操作存储卡和内存卡中的数据 122 实例047: 设置闹钟 129 实例048: 实现黑名单来电自动静音处理 135 实例049: 设置一个自动开机界面 138 实例050: 更换手机屏幕背景图片系统 140 实例051: 设置自动更换手机桌面背景 144 实例052: 自动控制后台系统服务 154 实例053: 在屏幕中拖动一个按钮 157 第4章 数据存储实例集锦 163 实例054: 在屏幕中显示SharedPreferences 中存储的信息 163 实例055: 演示数据添加、删除等操作 165 实例056: 编写一个手机日记本程序 170 实例057: 使用ContentProvider开发一个 手机日记本 177 实例058: 使用文件保存数据 188 实例059: 将网上的图片保存到SD卡并在 手机中显示出来 190 实例060: 保存联系人信息 194 第5章 电话和短信实例集锦 197 实例061: 编写一个拨号程序 197 实例062: 发送一条短信 200 实例063: 单击按钮实现拨号功能 203 实例064: 一个通用发短信程序 206 实例065: 收到短信后用E-mail邮件进行 通知 210 实例066: 实现触屏拨号功能 214 实例067: 一个短信群发程序 215 实例068: 来电后自动发送邮件通知 219 实例069: 监听手机拨接状态 220 实例070: 检查短信是否发送成功 223 第6章 图形图像实例集锦 229 实例071: 在屏幕中绘制一个矩形 229 实例072: 在屏幕中绘制一个画布 232 实例073: 实现水纹的透明效果 235 实例074: 渲染几何图形 239 实例075: 用图片为背景实现动画效果 242 实例076: 在手机屏幕中实现Frame动画 效果 244 实例077: 对图片进行缩放处理 246 实例078: 旋转屏幕中的图片 250 实例079: 实现旗帜飞扬的效果 253 实例080: 模拟构建一个3D场景效果 258 实例081: 模拟实现粒子系统效果 261 实例082: 在Canvas中写文字 265 实例083: 移动屏幕中的图片 272 实例084:在屏幕中绘制一个三维圆柱体 276 实例085: 获取并显示图片的宽和高 285 实例086: 编写一个手机屏保程序 287 实例087: 以触摸方式移动图片 295 第7章 和网络有关的实例集锦 299 实例088: 传递HTTP参数 299 实例089: 在屏幕中使用HTML程序 303 实例090: 在手机中浏览网页 304 实例091: 使用内置浏览器打开网页 305 实例092: 显示QQ空间中的照片 307 实例093: 通过RSS系统在线浏览新闻 309 实例094: 下载网络图片作为手机背景 320 实例095: 将文件上传至服务器 323 实例096: 开发一个移动博客发布器 326 实例097: 远程下载并安装一个软件 331 实例098: 控制蓝牙系统 336 第8章 多媒体实例集锦 346 实例099: 播放一个指定的MP3文件 346 实例100: 调节手机音量的大小 350 实例101: 实现相机预览和拍照功能 353 实例102: 在手机中播放影片 360 实例103: 手机录音系统 363 实例104: 设置手机中的铃声 368 实例105: 在线播放网络中的MP3 371 实例106: 在线下载音乐作为手机铃声 379 实例107: 播放GIF格式的动画 385 实例108: 在手机中播放MP4视频 391 实例109: 在线观看3GP视频 394 第9章 Google地图实例集锦 403 实例110: 定位当前位置的坐标 403 实例111: 在手机中使用Google地图 406 实例112: 在地图中定位输入的坐标 413 实例113: 在地图中快速查询某个位置 416 实例114: 随着手机的移动自动更新位置 418 实例115: 在手机地图中描绘线路并计算 线路距离 423 实例116: 在Google地图中显示指定的 位置 430 实例117: 在手机地图中查询一个地址 432 实例118: 在手机中实现地址查询 434 实例119: 开发一个路径导航系统 438 第10章 Google API实例集锦 446 实例120: 模拟验证官方账号 446 实例121: 在手机中开发一个Google搜索 程序 453 实例122: 在手机中编写一个翻译软件 458 实例123: 生成一个二维码 460 实例124: 使用Google Chart API生成二 维码 463 第11章 平板应用 469 实例125: 开发一个音乐播放器 469 实例126: 开发一个在线天气播报系统 475 实例127: 开发一个网页浏览程序 485 实例128: 使用文件来保存音乐状态 491 实例129: 在屏幕中显示不同的进度条 效果 494 第12章 游戏应用 498 实例130: 一个简单的贪吃蛇游戏 498 实例131: 开发一个魔塔游戏 504 实例132: 疯狂足球游戏 524 第13章 Android程序优化 547 实例133: 测试计算机的性能 547 实例134: 测试内存性能 550 实例135: 优化Android模拟器 553 实例136: 使用merge标签优化UI界面 556 实例137: 优化Android Layout 559 实例138: 优化Bitmap图片 560 第14章 综合实例--手机地图系统 563 实例139: 使用Google地图开发一个综合 地图系统 563 14.1 项目分析 563 14.1.1 规划UI界面 563 14.1.2 数据存储设计 564 14.2 具体实现 565 14.2.1 新建工程 565 14.2.2 主界面 565 14.2.3 新建界面 567 14.2.4 设置界面 570 14.2.5 帮助界面 574 14.2.6 地图界面 576 14.2.7 数据存取 587 14.2.8 实现Service服务 592 14.3 发布自己的作品来赢利 594 14.3.1 申请成为会员 594 14.3.2 生成签名文件 597 14.3.3 使用签名文件 602 14.3.4 发布 604 第15章 综合实例--音乐播放器系统 605 实例140:开发一个音乐播放器 605 15.1 项目介绍 605 15.1.1 项目背景介绍 605 15.1.2 项目目的 606 15.1.3 对读者的意义 606 15.2 需求分析 606 15.2.1 构成模块 606 15.2.2 功能结构图 609 15.2.3 系统功能说明 610 15.2.4 总体目标 610 15.3 设计数据库 611 15.3.1 字段设计 611 15.3.2 数据库连接 611 15.3.3 创建数据库 612 15.3.4 操作数据库 613 15.3.5 数据显示 614 15.4 具体编码 615 15.4.1 服务信息主界面 615 15.4.2 播放器主界面 616 15.4.3 播放列表功能 628 15.4.4 菜单功能模块 631 15.4.5 播放设置界面 634 15.4.6 设置显示歌词 638 15.4.7 文件浏览器模块 639 第16章 体育类游戏--NBA激情投篮 644 实例141:NBA激情投篮 644 16.1 项目介绍 644 16.1.1 意义和技术分析 644 16.1.2 策划游戏 645 16.1.3 准备工作 645 16.2 项目架构 646 16.2.1 总体架构 646 16.2.2 规划类 646 16.3 具体编码 648 16.3.1 编写主类LanqiuActivity 648 16.3.2 编写常量类 652 16.3.3 设计游戏试玩界面 658 16.3.4 绘制游戏场景 663 第17章 综合邮件系统 672 实例142:开发一个综合邮件系统 672 17.1 项目介绍 672 17.1.1 项目背景介绍 672 17.1.2 项目目的 672 17.2 系统需求分析 673 17.2.1 构成模块 673 17.2.2 系统流程 675 17.2.3 功能结构图 676 17.2.4 系统功能说明 677 17.2.5 系统需求 677 17.3 数据存储设计 677 17.3.1 用户信息类 678 17.3.2 SharedPreferences 682 17.4 具体编码 684 17.4.1 欢迎界面 684 17.4.2 系统主界面 687 17.4.3 邮箱类型设置 694 17.4.4 邮箱收取设置 697 17.4.5 邮箱发送设置 703 17.4.6 邮箱用户检查 708 17.4.7 设置用户别名 713 17.4.8 用户邮件编辑 716 17.5 总结 723

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值