Android中闹铃的设置

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_WAKEUPm, 10000, pending);//用来匹配闹钟设置时间

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

 <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">  (优先级-10001000

                <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);//清空一个延迟跳转信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值