Android中闹铃的设置

在安卓中真正涉及到闹铃设备的类为AlarmManager类,而所谓的设备闹铃其实就是在用户设置一个指定的时间点到来的时候通过一种手段给系统发送一个自动跳转的广播,跳转之后在一个Activity活动中实现一个音乐的自动开启。了解到了这个道理我们就可以通许其特性去寻找解决的方法。

1,怎么发送一个广播

首先发送广播需要涉及到的类有AlarmManager类、PandingIntent类、Intent类。实例化AlarmManager用来启动一个闹钟,再得到它的对象,然后声明实例化Intent类用来从本Activity中跳转到一个BroadcastReceiver类的对象,然后在PandingIntent中设置一个延迟跳转,将之前写的Inetent作为参数加到里面,最后利用AlarmManager从自定义的时间,延迟一个自定义时间重复启动一个闹钟。

Ps:发送广播的自定义时间可以通过在布局文件中拿到一个TimePicker控件,通过Calendar来设定日期传给AlarmManger

代码详情如下:

AlarmManager  manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);//获得警报信息服务,用来启动闹钟

Intent intent1 = new Intent(DigitalClockActivity.this, AlarmReceiver.class);

//实例化一个延迟跳转类,获得Broadcast(广播)(上下文对象,请求吗,跳转类,无视)

PendingIntent pending = PendingIntent.getBroadcast(getApplicationContext(), 1, intent1, 0);

//设置一个重复播放的闹钟(AlarmManager.RTC_WAKEUP(唤醒闹钟),开启时间,割多长时间循环启动,延迟跳转的意图);

AlarmManager manager.setRepeating(AlarmManager.RTC_WAKEUP, m, 10000, pending);//用来匹配闹钟设置时间

Ps:Intent的跳转分为显式跳转和隐式跳转,显式跳转就如上面代码中的那种,而隐式跳转用到的是Intent intent = new Intent("msg");这个方法,而里面的字符串的来源就是在清单文件中的BroadcastReceiver类中添加的action的name内容,相关代码如下:

<receiver android:name="com.digitalclockset.AlarmReceiver">

<intent-filter >

<action android:name="Sendthealarmclockradio">

(msg内容就是Sendthealarmclockradio)

</action>

</intent-filter>

</receiver>

2,接收一个从AlarmManager中发送的广播

接收广播需要新建一个继承了BroadcastRceiver的类。在该类中需要的只有Intent来实现一个Acticity的跳转,但在启动之前需要给Intent添加一个意图。

代码详情如下:

public class AlarmReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub

Intent intent2 = new Intent(context, AlarmActicity.class);//接收广播后跳转到AlarmActicity类

intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(intent2);

}

}

另外一个PendingIntent也可以同时跳转多个BroadcastReceiver,同理,一个AlarmManager也可以同时执行多个PendingIntent,在发送之前可以多自定义的BroadcastReceiver在清单文件中进行一个优先级的设定,而且要使用BroadcastReceiver又必须对其进行注册才能使用,比如

<receiver android:name=".Receive1"   (注册BroadcastReceiver)

<intent-filter android:priority="15">  (优先级-1000—1000)

<action android:name="www.android1.com"/>

</intent-filter>

</receiver>

在这之下还有另一种注册方法,即在Java文件中进行注册,在Java中注册需要覆写它的四个方法,而使用到的只有其中两个,代码如下

@Override

protected void onStart() {

// TODO Auto-generated method stub

super.onStart();

}

@Override

protected void onResume() {

super.onResume();

registerReceiver(BroadcastReceiver, IntentFilter);//注册

}

@Override

protected void onPause() {

super.onPause();

unregisterReceiver(BroadcastReceiver);//注销

}

在另外两个覆写方法onStart()和onStop()也可以注册,但是记住这中注册方法都是一一对应的,即在onResume()中注册要在onPause() 中注销,在onStart()中注册就要在onStop()中取消。

3:闹钟实现

在跳转后的Acticity中首先需要创建一个Timer定时器,用该对象来设定一个闹钟开启的时间和在规定的时间内循环开启。

代码详情如下:

public class AlarmActicity extends BaseActivity {

int recLen = 0;

Timer timer = new Timer(true);// 创建定时器

MediaPlayer mMediaPlayer;

TimerTask task = new TimerTask() {

@Override

public void run() {

// TODO Auto-generated method stub

Message message = new Message();

message.what = 1;

handler.sendMessage(message);// 发送消息

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.clock_dialog);

timer.schedule(task, 1000, 10000);//让音乐在Dialog显示之后的1秒之后再每10秒循环播放

mMediaPlayer = new MediaPlayer();

try {

mMediaPlayer.setDataSource(getApplicationContext(), RingtoneManager

.getDefaultUri(RingtoneManager.TYPE_RINGTONE));

mMediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);

mMediaPlayer.setLooping(true);

mMediaPlayer.prepare();

}  catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

mMediaPlayer.start();

}

Handler handler = new Handler() {

public void handleMessage(Message msg) {

switch (msg.what) {

case 1:

recLen++;

break;

}

};

};

4:取消一个闹钟

取消闹钟只要让AlaremManager类来清楚一个PendingIntent跳转就好

代码详情如下:

Manager.cancel(pending);//清空一个延迟跳转信息

Android中闹铃的设置相关推荐

  1. android 颜色资源文件,android中colors.xml颜色设置资源文件的方法

    1. 打开res目录下的values文件夹,双击打开colors.xml文件进行编辑 上代码 #008577 #00574B #D81B60 #ff0000 #0000ff 2. 在res目录下的la ...

  2. android 手机震动1次,Android中手机震动的设置(Vibrator)的步骤

    Android中手机震动的设置(Vibrator)的步骤: a.通过系统服务获得手机震动服务,Vibrator vibrator = (Vibrator)getSystemService(VIBRAT ...

  3. android 中color目录,android中colors.xml颜色设置资源文件的方法

    1. 打开res目录下的values文件夹,双击打开colors.xml文件进行编辑 上代码 #008577 #00574B #D81B60 #ff0000 #0000ff 2. 在res目录下的la ...

  4. android系统闹铃添加方法,Android 设置系统闹铃和日历

    一.创建定时器 设置权限 案例 https://developer.android.com/reference/android/provider/AlarmClock.html#EXTRA_MESSA ...

  5. android 简单闹铃,Android_android闹铃简单实现,1.闹铃activity http://schemas.android - phpStudy...

    android闹铃简单实现 1.闹铃activity http://schemas.android.com/apk/res/android" xmlns:tools="http:/ ...

  6. 自定义注解在拦截器中为空_如何在Android中为特定联系人设置自定义铃声

    自定义注解在拦截器中为空 Everyone likes to know who's calling before they actually pick up the phone, and the ea ...

  7. android手机闹铃

    最近有个想法,想开发一款自用的手机闹铃软件,早上只有正确拼写前一晚设定背诵的单词,才可以使闹铃停下来,正在酝酿具体的细节,最近也正在学习相关的Android手机开发,就使用自己的中兴U880做测试吧, ...

  8. Android 实现闹铃效果

    最近项目里有个功能,需要实现闹铃效果. 网上查了一大堆资料,都说要使用AlarmManager,AlarmManager使用起来倒是很简单.但App 一旦被杀了,就不起作用了-- 然后又有好多可以让a ...

  9. js调用android的闹铃,JS定时器小应用--设置闹铃

    代码呈上 var date = new Date(); date.setDate(15); //日设置 date.setMonth(1); date.setFullYear(2019); date.s ...

最新文章

  1. c 语言 按位与或非运算符,C++中的按位与、按位与或|、按位异或^运算符详解
  2. Leangoo研发管理软件甘特图6.0.2 版发布
  3. 2008 R2 AD通过组策略针对用户进行限制QQ等软件的运行
  4. jieba(结巴)常用方法
  5. java策略模式学习
  6. PID参数整定——Z-N方法
  7. 软件岗位--CTO、技术VP、技术总监、首席架构师
  8. 黑客泄露澳大利亚大量求职者信息,其中包含11家重要公司名单
  9. java jdk--同时安装两个jdk并且切换
  10. (一)使用 Sliced Sprite 制作 UI 图像
  11. fastadmin调用发送邮件验证码接口
  12. 家用路由器常见之基本概念
  13. 人工智能的发展趋势综述
  14. java 验证手机号码、电话号码(包括最新的电信、联通和移动号码) 1
  15. 中文汉字注音,汉字转拼音,支持图片识别文字,支持结果转图下载,附上小程序核心源码
  16. k8s各版本离线安装部署教程
  17. localhost 访问不跨域 但 127.0.0.1 访问跨域,你知道为什么吗
  18. k近邻算法 (KNN)
  19. 小米10pro搭载鸿蒙,华为P50将全面搭载鸿蒙OS上市;小米11 Pro手机CAD图曝光
  20. Ubuntu创建虚拟桌面

热门文章

  1. 应届生前端面试题笔记
  2. 轻松玩转新编日语5 zz江沪
  3. 尘埃落定!清华才子王垠​加入华为职级22,前阿里P10赵海平加入字节跳动,职级或为4+...
  4. 苹果手机咋截屏_苹果手机信号满格但是没网络咋处理
  5. Android学习之ContentProvider
  6. OpenLayers 彻底清除测量图层Overlays
  7. 澳洲服务器拳头账号怎么注册,云顶之弈手游澳服账号怎么注册 澳洲服拳头账号注册方法分享...
  8. 5种方法输出10的阶乘
  9. php微信分享无效签名,关于微信链接分享一直报签名无效的问题
  10. Android_基于g-sensor的坐下动作的的识别