转 http://blog.csdn.net/jeethongfei/article/details/6767826
1、AlarmManager,顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,可以实现从指定时间开始,以一个固定的间隔时间执行某项操作,所以常常与广播(Broadcast)连用,实现闹钟等提示功能
2、AlarmManager的常用方法有三个:
(1)set(int type,long startTime,PendingIntent pi) ;
该方法用于设置一次性闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟执行时间,第三个参数表示闹钟响应动作。
(2)setRepeating(int type,long startTime,long intervalTime,PendingIntent pi);
该方法用于设置重复闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟首次执行时间,第三个参数表示闹钟两次执行的间隔时间,第三个参数表示闹钟响应动作。
(3)setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi);
该方法也用于设置重复闹钟,与第二个方法相似,不过其两个闹钟执行的间隔时间不是固定的而已。
3、三个方法各个参数详悉:
(1)int type : 闹钟的类型,常用的有5个值:AlarmManager.ELAPSED_REALTIME、 AlarmManager.ELAPSED_REALTIME_WAKEUP、AlarmManager.RTC、 AlarmManager.RTC_WAKEUP、AlarmManager.POWER_OFF_WAKEUP。
AlarmManager.ELAPSED_REALTIME表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系统启动开始),状态值为3;
AlarmManager.ELAPSED_REALTIME_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用相对时间,状态值为2;
AlarmManager.RTC表示闹钟在睡眠状态下不可用,该状态下闹钟使用绝对时间,即当前系统时间,状态值为1;
AlarmManager.RTC_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间,状态值为0;
AlarmManager.POWER_OFF_WAKEUP表示闹钟在手机关机状态下也能正常进行提示功能,所以是5个状态中用的最多的状态之一,该状态下闹钟也是用绝对时间,状态值为4;不过本状态好像受SDK版本影响,某些版本并不支持;
(2)long startTime : 闹钟的第一次执行时间,以毫秒为单位,可以自定义时间,不过一般使用当前时间。需要注意的是,本属性与第一个属性(type)密切相关,如果第一个参数对 应的闹钟使用的是相对时间(ELAPSED_REALTIME和ELAPSED_REALTIME_WAKEUP),那么本属性就得使用相对时间(相对于 系统启动时间来说),比如当前时间就表示为:SystemClock.elapsedRealtime();如果第一个参数对应的闹钟使用的是绝对时间 (RTC、RTC_WAKEUP、POWER_OFF_WAKEUP),那么本属性就得使用绝对时间,比如当前时间就表示 为:System.currentTimeMillis()。
(3)long intervalTime :对于后两个方法来说,存在本属性,表示两次闹钟执行的间隔时间,也是以毫秒为单位。
(4)PendingIntent pi : 是闹钟的执行动作,比如发送一个广播、给出提示等等。PendingIntent是Intent的封装类。需要注意的是,如果是通过启动服务来实现闹钟提 示的话,PendingIntent对象的获取就应该采用Pending.getService(Context c,int i,Intent intent,int j)方法;如果是通过广播来实现闹钟提示的话,PendingIntent对象的获取就应该采用 PendingIntent.getBroadcast(Context c,int i,Intent intent,int j)方法;如果是采用Activity的方式来实现闹钟提示的话,PendingIntent对象的获取就应该采用 PendingIntent.getActivity(Context c,int i,Intent intent,int j)方法。如果这三种方法错用了的话,虽然不会报错,但是看不到闹钟提示效果。
4、 AlarmManager使用示例:利用用户自定义广播实现闹钟功能,从当前时间开始,每隔10分钟提示一次
(1)实现原理:在 SendActivity.java中定义一个AlarmManager对象,指定该对象从当前时间开始,每隔10分钟向名为 “MYALARMRECEIVER”的广播接收器发出一条广播,附加消息内容为“你该打酱油了”;创建一个名为MyReceiver的广播接收器,在其 onReceive方法中获取Intent对象传过来的值(“你该打酱油了”)并用一个Toast组件显示出来;在 AndroidManifest.xml文件中注册SendActivity类和广播接收器类MyReceiver,设置MyReceiver的 action的值为“MYALARMRECEIVER”
(2)代码实现:
第一步:创建广播接收类MyReceiver.java,在其onReceive方法中获取Intent的附加信息msg,并用Toast组件显示
public void onReceive(Context context,Intent intent){ String msg = intent.getStringExtra("msg"); Toast.makeText(context,msg,Toast.LENGTH_SHORT).show(); }
第二步:在AndroidManifest.xml中注册广播接收类MyReceiver.java,设置其action值为“MYALARMRECEIVER”
<receiver android:name=".MyReceiver"> <intent-filter> <action android:name="MYALARMRECEIVER" /> </intent-filter> </receiver>
第三步:创建SendActivity.java,用于设置闹钟,定时发出广播
//创建Intent对象,action指向广播接收类,附加信息为字符串“你该打酱油了” Intent intent = new Intent("MYALARMRECEIVER"); intent.putExtra("msg","你该打酱油了"); //创建PendingIntent对象封装Intent,由于是使用广播,注意使用getBroadcast方法 PendingIntent pi = PendingIntent.getBroadcast(this,0,intent,0); //获取AlarmManager对象 AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); //设置闹钟从当前时间开始,每隔10分钟执行一次PendingIntent对象,注意第一个参数与第二个参数的关系 am.setRepeating(AlarmManager.RTC_WAKEUP,System.currentMillis(),600*1000,pi);
第四步:在AndroidManifest中为SendActivity.java注册
<activity android:name=".SendActivity" />
adMob com.admob
adSence com.google.ads
fortumo com.fortumo
#paypal com.paypal
#google_analytics com.google.android.apps.analytics
youmi net.youmi
flurry com.flurry
adwhirl com.adwhirl
mobclix com.mobclix
skyhookwireless com.skyhookwireless
Quattro_Wireless com.qwapi
smaato_Wireless com.smaato
medialets_Wireless com.smaato
jumptap_Wireless com.jumptap
#google_licensing com.android.vending.licensing
millennialmedia com.millennialmedia
inmobi com.inmobi
zestadz com.zestadz
tencent_mobwin com.tencent.mobwin
dianru com.dianru.sdk
domob cn.domob.android
vpon com.vpon.adon.android
greystripe com.greystripe.android.sdk
mdotm com.mdotm.android.ads
admogo com.admogo
adchina com.adchina.android.ads
fractalist com.fractalist.android.ads
wooboo com.wooboo
energysource com.energysource.szj
aduu cn.aduu.adsdk
adview com.adview
adwo com.adwo.adsdk
airad com.mt.airad
baidu com.baidu
appmedia cn.appmedia.ad
casee cn.casee.adsdk
izp com.izp.views
adlib_android com.l.adlib_android
lmmob com.lmmob.ad.sdk
mdotm com.mdotm.android.ads
mobisage com.mobisage
suizong com.suizong.mobplate
madhouse com.madhouse.android.ads
QQ_MobWin MobWin
ignitevision com.ignitevision.android.ads
umengAd com.umengAd
wiyun com.wiyun.ad
winad com.winad.android.ads
wqmobile com.wqmobile.sdk
dianjoy com.dianjoy
1. application executable is missing a required architecture armv6
In the Xcode 4.2 GM this is still a problem but you can resolve it by doing the following.
Switch to the files/folders view in xcode project
Select your Project ( the blue icon)
Select your Application under Targets in the middle of the screen.
Go To build settings
Find Architectures > Distribution
Expand this section so you can see both Debug and Release
Change "Standard (armv7) - $(ARCH_STANDARD_32_BIT)" to "Other..."
Replace, "Standard (armv7) - $(ARCH_STANDARD_32_BIT)" with "armv6", then add a new item "armv7"
Remember you may need to do this for all included projects aka frameworks such as TAPKU
2. 说是找不到图标 Unable to verify icon dimensions, no icon found
这个是图标命名的问题。。一定要 Icon.png .....Retina的图标名称为:Icon@2x.png