android实现闹钟与通知栏

来源:互联网 发布:法国中尉的女人 知乎 编辑:程序博客网 时间:2024/05/22 14:29

android实现闹钟与通知栏,闹钟主要用到了AlarmManager,在这里我做了一个拐弯,当闹钟设置时间到了后,先跳转到广播,再又广播跳转到闹钟响起界面,结果如下
这里写图片描述
这里写图片描述

首先是activity_alarm.xml布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_alarm"    android:layout_width="match_parent"    android:layout_height="match_parent"android:orientation="vertical"    tools:context="com.example.android_27.AlarmActivity"><Button    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="一次性闹钟"    android:id="@+id/b_yc"    />    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="周期闹钟"        android:id="@+id/b_zq"        />    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="结束周期闹钟"        android:id="@+id/b_jszq"        /></LinearLayout>

AlarmActivity类

public class AlarmActivity extends AppCompatActivity {    private Button b_yc;    private Button b_zq;    private Button b_jszq;    private AlarmManager alarmManager;    private PendingIntent pendingIntent;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_alarm);        //获得一次性闹钟的ID        b_yc =(Button)findViewById(R.id.b_yc);        //获得周期闹钟的ID        b_zq =(Button)findViewById(R.id.b_zq);        //获得结束周期闹钟的ID        b_jszq =(Button)findViewById(R.id.b_jszq);        //实例化闹钟管理器        alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);        //一次性闹钟的点击事件        b_yc.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //获得当前事件                Calendar calendar=Calendar.getInstance();                //小时                int x=calendar.get(Calendar.HOUR_OF_DAY);                //分钟                int f=calendar.get(Calendar.MINUTE);                //弹出时间对话框               TimePickerDialog timePickerDialog=new TimePickerDialog(AlarmActivity.this,new TimePickerDialog.OnTimeSetListener(){                   @Override                   public void onTimeSet(TimePicker timePicker, int i, int i1) {                       Calendar c=Calendar.getInstance();                       c.set(Calendar.HOUR_OF_DAY,i);                       c.set(Calendar.MINUTE,i1);                       //时间一到,执行相对应的操作                       Intent  intent=new Intent();                       intent.setAction("com.example.android_27.A");                       PendingIntent pendingIntent=PendingIntent.getBroadcast(AlarmActivity.this,0x101,intent,0);                       //设置一次性闹钟                       alarmManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pendingIntent);                   }               },x,f,true);                timePickerDialog.show();            }        });        //周期性闹钟的点计算事件        b_zq.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //获取当前系统的时间                Calendar calendar=Calendar.getInstance();                int x=calendar.get(Calendar.HOUR_OF_DAY);                int f=calendar.get(Calendar.MINUTE);                //01.弹出时间对话框(选择时间)                TimePickerDialog timePickerDialog=new TimePickerDialog(AlarmActivity.this, new TimePickerDialog.OnTimeSetListener() {                    @Override                    public void onTimeSet(TimePicker timePicker, int i, int i1) {                        //02.确定选择好的时间  i  i1                        Calendar c=Calendar.getInstance();                        c.set(Calendar.HOUR_OF_DAY,i);                        c.set(Calendar.MINUTE,i1);                        //04.时间一到,执行相对应的操作                        Intent  intent=new Intent();                        intent.setAction("com.example.android_27.A");                        pendingIntent = PendingIntent.getBroadcast(AlarmActivity.this,0x102,intent,0);                        //03.设置闹钟(周期)                        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),60*60*24*1000, pendingIntent);                    }                },x,f,true);                timePickerDialog.show();            }        });        //结束周期性闹钟的点击事件        b_jszq.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                alarmManager.cancel(pendingIntent);            }        });    }}

跳转到广播的界面
GBActity类

public class GBActity extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        if("com.example.android_27.A".equals(intent.getAction())){            Intent intent1=new Intent(context,NzActivity.class);            //给Intent设置标志位Flags            intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            context.startActivity(intent1);        }    }}跳转到广播 <intent-filter>                <action android:name="com.example.android_27.A" />            </intent-filter>

NzActivity类:

public class NzActivity extends AppCompatActivity {    private Button b_tz;    private MediaPlayer mediaPlayer;    private PendingIntent pendingIntent;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_nz);        //获得停止的ID        b_tz =(Button)findViewById(R.id.b_tz);        //播放音乐        mediaPlayer = MediaPlayer.create(this,R.raw.f);        mediaPlayer.start();        b_tz.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                mediaPlayer.stop();                finish();            }        });    }}

通知栏主要用到了NotificationManager
//实例化通知管理器

     NotificationManager notificationManager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);       //实例化通知        NotificationCompat.Builder builder=new NotificationCompat.Builder(this);        builder.setDefaults(NotificationCompat.DEFAULT_ALL);      builder.setContentTitle("闹钟响了");       builder.setSmallIcon(android.R.drawable.ic_lock_idle_alarm);       builder.setContentText("快点起床了");        pendingIntent = PendingIntent.getActivity(NzActivity.this,0x104,new Intent(NzActivity.this,AlarmActivity.class),0);//        builder.setContentIntent(pendingIntent);        Notification notification=builder.build();        //发送通知        notificationManager.notify(0x103,notification);        notificationManager.cancel(0);

结果如下
这里写图片描述

0 0