Android闹钟
2015-08-13 19:20
435 查看
Android闹钟
在编写闹钟之前首先说一下Android中的广播机制,BroadCast是一种广泛应用的在应用程序之间传输信息的机制,例如在现实生活中人们听收音机,许许多多不同的广播电台发送特定频率的信号,当人们的收音机调成与广播电台频率相同时就可以收听广播内容了,Android中的广播机制差不多就是这个意思。
注:
1、在Android中我们所发送的广播内容是在一个Intent对象中的。
2、在Android中要想接收广播内容则需要注册一个BroadCastReceiver进行接收,只有发送广播的action与接收广播的action相同时才可以接收广播内容。
接下来开始编写闹钟代码:
1、首先我们要写一个闹钟响的时候给用户的提示信息的类,这个类继承自Activity
在编写闹钟之前首先说一下Android中的广播机制,BroadCast是一种广泛应用的在应用程序之间传输信息的机制,例如在现实生活中人们听收音机,许许多多不同的广播电台发送特定频率的信号,当人们的收音机调成与广播电台频率相同时就可以收听广播内容了,Android中的广播机制差不多就是这个意思。
注:
1、在Android中我们所发送的广播内容是在一个Intent对象中的。
2、在Android中要想接收广播内容则需要注册一个BroadCastReceiver进行接收,只有发送广播的action与接收广播的action相同时才可以接收广播内容。
接下来开始编写闹钟代码:
1、首先我们要写一个闹钟响的时候给用户的提示信息的类,这个类继承自Activity
public class AlarmMessageActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); new AlertDialog.Builder(this).setTitle("该起床了").setMessage("现在得时间是:" + new SimpleDateFormat("yyyy年MM月dd日mm分ss秒").format(new Date())).setPositiveButton("关闭", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { AlarmMessageActivity.this.finish(); } }).show(); } }2、接下来就是布局文件。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <!-- 定义一个时间选择器,和两个按钮 --> <TimePicker android:id="@+id/tp" android:layout_width="match_parent" android:layout_height="wrap_content"> </TimePicker> <TextView android:id="@+id/text1" android:text="当前未设置闹钟" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/set" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="设置闹钟"/> <Button android:id="@+id/delet" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="取消闹钟" /> </LinearLayout>3、编写一个广播接收类
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; /* 定义一个广播*** */ public class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent it = new Intent(context, AlarmMessageActivity.class); //Context中有一个startActivity方法,Activity继承自Context, //重载了startActivity方法。如果使用Activity的 startActivity // 方法,不会有任何限制,而如果使用Context的startActivity方法的话,就需要开启一个新的task. it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(it); } }4、编写MainActivity.java文件代码
package com.example.dell.broadcastproject; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.TimePicker; import android.widget.Toast; import java.util.Calendar; import java.util.Timer; public class MainActivity extends AppCompatActivity { //闹钟服务 private AlarmManager alarm; private Button setAlarm, deletAlarm; private TextView text1; private TimePicker tp; //由于无法取得时间,所以设置两个整型值记录 private int hourOfDay = 0; private int minute = 0; //根据默认的时区实例化对象 private Calendar calendar = Calendar.getInstance(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setAlarm = (Button)findViewById(R.id.set); deletAlarm = (Button)findViewById(R.id.delet); text1 = (TextView)findViewById(R.id.text1); tp = (TimePicker)findViewById(R.id.tp); tp.setIs24HourView(true); //取得闹钟服务 alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); setAlarm.setOnClickListener(new OnSetClickListenerImpl()); deletAlarm.setOnClickListener(new OnDeleteClickListenerImpl()); tp.setOnTimeChangedListener(new OnTimeChangedListenerImpl()); } private class OnTimeChangedListenerImpl implements TimePicker.OnTimeChangedListener { @Override public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { //给calendar设置为当前的时间 MainActivity.this.calendar.setTimeInMillis(System.currentTimeMillis()); //设置小时数 MainActivity.this.calendar.set(Calendar.HOUR_OF_DAY, hourOfDay); //设置分钟数 MainActivity.this.calendar.set(Calendar.MINUTE, minute); //设置秒数,由于设置闹钟时大部分都不使用秒和毫秒所以这里设置为0 MainActivity.this.calendar.set(Calendar.SECOND, 0); //设置毫秒数 MainActivity.this.calendar.set(Calendar.MILLISECOND, 0); MainActivity.this.hourOfDay = hourOfDay; MainActivity.this.minute = minute; } } private class OnSetClickListenerImpl implements View.OnClickListener { @Override public void onClick(View v) { //启动AlarmReceiver这个类 Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); //设置一个动作,就好比是在设置一个特有的频率,在后边配置AndroidManifest.xml文件时 //再设置一个过滤器就把名字为"org.lxh.action.setalarm"的Intent给过滤出来了。 intent.setAction("org.lxh.action.setalarm"); //PendingIntent不是立刻执行某个动作,而是当满足一定条件或触发某个事件时才执行指定的操作 PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT); /* 参数解释: 第一个参数:表示闹钟类型。 第二个参数:表示闹钟的执行时间(闹钟什么时候响)。 第三个参数:表示闹钟响的时候该去干什么 AlarmManager.RTC_WAKEUP:硬件闹钟,当闹钟响时唤醒手机休眠 AlarmManager.ELAPSED_REALTIME_WAKEUP,真实时间流逝闹钟,当闹钟响时唤醒手机休眠 */ MainActivity.this.alarm.set(AlarmManager.RTC_WAKEUP,MainActivity.this.calendar.getTimeInMillis(),sender); //在文本组件上显示闹钟响起的时间 MainActivity.this.text1.setText("闹钟响起的时间是:" + MainActivity.this.hourOfDay + " 点 " + MainActivity.this.minute + " 分"); //设置一个消息提示框 Toast.makeText(MainActivity.this,"闹钟设置成功", Toast.LENGTH_LONG).show(); } } private class OnDeleteClickListenerImpl implements View.OnClickListener { @Override public void onClick(View v) { if (MainActivity.this.alarm != null) { Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); intent.setAction("org.lxh.action.setalarm"); PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT); //取消闹钟 MainActivity.this.alarm.cancel(sender); MainActivity.this.text1.setText("您已成功删除当前闹钟"); Toast.makeText(MainActivity.this,"闹钟删除成功", Toast.LENGTH_LONG).show(); } } } }5、对AndroidManifest.xml文件进行配置,以下是配置代码。
<receiver android:name="AlarmReceiver" android:enabled="true" android:process=":remote" > //过滤出名字为org.lxh.action.setalarm的Intent //如若匹配则会调用AlarmReceiver.java中的onReceive()方法 <intent-filter> <action android:name="org.lxh.action.setalarm"></action> </intent-filter> </receiver>
相关文章推荐
- Android ScrollView不在最顶部解决办法
- Android平台免Root无侵入AOP框架Dexposed使用详解
- Android之Service启动方式
- 平安科技移动开发二队技术周报(第十五期)
- 平安科技移动开发二队技术周报(第十四期)
- 最美应用-从Android研发工程师的角度之[厨房故事]
- Android开发实现连续跳转几个界面后在最后一个界面完美跳回最初的界面
- 最美应用-从Android研发工程师的角度之[最美时光]
- Android 学习之Fragment的创建
- android百度定位后显示在地图上点击弹出气泡
- Android 驱动和系统开发 2. 解析模拟器GPS模块
- android购物车的实现
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- AndroidStudio 代码混淆proguard记录
- Android ViewGroup事件分发机制
- android onTouch和手势基础详解
- 建立企业内部maven服务器并使用Android Studio发布公共项目
- android 自定义 Dialog
- android Gson解析1
- Android--上的内存分配策略优化