广播 闹钟

来源:互联网 发布:知乎 a脑波音乐副作用 编辑:程序博客网 时间:2024/05/16 01:15

注册Broadcast Receiver的方法

1、  Android Manifest中进行注册(与应用程序Activity没有关系,不会因为Activity销毁而不能发送广播)

<activityandroid:name="com.example.receiver.MyReceiver">

           <intent-filter>

               <actionandroid:name="com.example.receiver.ACTION"/>

                </intent-filter>

2、 在应用程序的代码中进行注册

Activityà

privatefinalstaticStringACTION ="com.example.receiver.ACTION";

ActivityOnResume()方法中注册

SecondReceiver receiver =newSecondReceiver();

               IntentFilterfilter = new IntentFilter();

               filter.addAction(ACTION);

                registerReceiver(receiver,filter);

 

ActivityOnPause()方法中取消注册

unregisterReceiver(receiver);

构建Intent对象发送广播

隐式跳转

privatefinalstaticStringACTION ="com.example.receiver.ACTION";

Intent  intent = new Intent();

intent.setAction(Action);

sendBroadcast(intent);//发送普通广播

sendOrderedBroadcast(in,null);//发送有序广播

sendStickyBroadcast(in);//发送延迟的广播

显示跳转

Intent intent =newIntent(ClockActivity.this,AlarmReceiver.class);

接受广播,跳转到另一个Activity

@Override

    publicvoid onReceive(Contextcontext, Intent intent) {

       Intent in = newIntent(context,MainActivity.class);

       in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

       context.startActivity(in);

    }

 

闹钟服务(AlarmManager):可在指定的时间或指定的周期启动其他组建(BroadcastReceiver,Activity,Server)

1、         获取AlarmManager对象

AlarmManager am = (AlarmManager)getSystemService(Service.ALARM_SERVICE);

2、         启动指定的组件

Calendar c =Calendar.getInstance();//日历控件

TimePickertime

time = (TimePicker)view.findViewById(R.id.timePicker1);

               time.setIs24HourView(true);//设置TimePicker为24小时制

c.setTimeInMillis(System.currentTimeMillis());

                       c.set(Calendar.HOUR_OF_DAY,time.getCurrentHour());

                       c.set(Calendar.MINUTE,time.getCurrentMinute());

                       c.set(Calendar.SECOND,0);

                       c.set(Calendar.MILLISECOND,0);

                        tmps = time.getCurrentHour()+":"+(time.getCurrentMinute()<10?("0"+time.getCurrentMinute()):time.getCurrentMinute());

s =c.getTimeInMillis();

 

Intent intent =newIntent(ClockActivity.this,AlarmReceiver.class);

//延迟发送

PendingIntent   sender = PendingIntent.getBroadcast(ClockActivity.this,0, intent, 0);

//1、即使关机也会执行sender所对应的组件 2、设置的时间

am.set(AlarmManager.RTC_WAKEUP,s, sender);

 

3、编写闹钟弹出界面

 

启动程序

String pkname = pkInfo.activities[0].name;//获得应用程序的第一个Activity名字

Intent intent=newIntent();

ComponentName cn =newComponentName(pkInfo.packageName,pkname);//启动程序

            intent.setComponent(cn);

            startActivity(intent);

接受系统的广播需要加权限