通过网上的例子 自己根据相关功能修改的 如有不合理的地方 请提出来 互相学习


一共有3个类 MainActivity.java 主程序
AlarmReceiver.java 广播接收器
MusicService.java service播放音乐

MainActivity.java
package com.yqy.yqy_alarm;import java.util.Calendar;import android.app.Activity;import android.app.AlarmManager;import android.app.PendingIntent;import android.app.TimePickerDialog;import android.content.Intent;import android.content.SharedPreferences;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.text.style.ImageSpan;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.TimePicker;public class MainActivity extends Activity {private TextView tv = null;      private Button setTime,cancelTime;      private Calendar c = null;      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);        String alarm = getIntent().getStringExtra("alarm");        if(alarm != null&&alarm.equals("alarm")){            stopService(new Intent("com.yqy.yqy_alarm.MUSIC"));          }                tv = (TextView)findViewById(R.id.tv);          setTime = (Button)findViewById(R.id.setAlarm);          cancelTime = (Button)findViewById(R.id.cancelAlarm);          //得到日历实例,主要是为了下面的获取时间          c = Calendar.getInstance();          setTime.setOnClickListener(new Button.OnClickListener()          {                @Override              public void onClick(View arg0) {                  c.setTimeInMillis(System.currentTimeMillis());                  int hour = c.get(Calendar.HOUR_OF_DAY);                  int minute = c.get(Calendar.MINUTE);                  new TimePickerDialog(MainActivity.this, minute, new TimePickerDialog.OnTimeSetListener() {                      @Override                      public void onTimeSet(TimePicker view, int hourOfDay, int minute) {                          //是设置日历的时间,主要是让日历的年月日和当前同步                          c.setTimeInMillis(System.currentTimeMillis());                          //设置小时分钟,秒和毫秒都设置为0                          c.set(Calendar.HOUR_OF_DAY, hourOfDay);                          c.set(Calendar.MINUTE, minute);                          c.set(Calendar.SECOND, 0);                          c.set(Calendar.MILLISECOND, 0);                                                    int requestCode = 0;//闹钟的唯一标示                        Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);                          intent.putExtra("requestCode", requestCode);                        PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, requestCode, intent, 0);                          //得到AlarmManager实例                          AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);                          //根据当前时间预设一个警报                          am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);                          /**                          * 第一个参数是警报类型;第二个参数是第一次执行的延迟时间,可以延迟,也可以马上执行;第三个参数是重复周期为一天                          * 这句话的意思是设置闹铃重复周期,也就是执行警报的间隔时间                          */  //                      am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+(60*1000),   //                              (24*60*60*1000), pi);  //                        am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),   //                                1000*60*5, pi);                                            String msg = hourOfDay+":"+minute;                          tv.setText("当前设置的闹钟时间:"+msg);                      }                  }, hour, minute, true).show();                  //上面的TimePickerDialog中的5个参数参考:http://blog.csdn.net/yang_hui1986527/article/details/6839342              }                        });                    cancelTime.setOnClickListener(new Button.OnClickListener()          {                @Override              public void onClick(View v) {                  Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);                  PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0,                          intent, 0);                  AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);                  //取消警报                  am.cancel(pi);                  tv.setText("闹钟取消");                  //取消闹钟的同时取消音乐                  stopService(new Intent("com.yqy.yqy_alarm.MUSIC"));              }                        });      }  }  

AlarmReceiver
package com.yqy.yqy_alarm;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.BroadcastReceiver;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.widget.Toast;public class AlarmReceiver extends BroadcastReceiver {Intent intent;int requestCode = -1;@Overridepublic void onReceive(Context context, Intent arg1) {requestCode = arg1.getIntExtra("requestCode", 0);NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);               Notification n = new Notification(R.drawable.ic_launcher, "Hello,there!", System.currentTimeMillis());             n.flags = Notification.FLAG_AUTO_CANCEL;    intent = new Intent(context, MainActivity.class);intent.putExtra("alarm", "alarm");intent.setComponent(new ComponentName("com.yqy.yqy_alarm", "com.yqy.yqy_alarm.MainActivity"));intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);//关键的一步,设置启动模式PendingIntent contentIntent = PendingIntent.getActivity(context, 0,  intent, PendingIntent.FLAG_CANCEL_CURRENT);  n.setLatestEventInfo(        context,        "Hello,there!",         "Hello,there,I'm john.",         contentIntent);nm.notify(R.string.app_name, n);        Toast.makeText(context, "闹钟时间到", Toast.LENGTH_SHORT).show();          intent = new Intent("com.yqy.yqy_alarm.MUSIC");        //启动Service播放音乐          context.stopService(new Intent("com.yqy.yqy_alarm.MUSIC"));        context.startService(intent);  }}

MusicService
package com.yqy.yqy_alarm;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.IBinder;public class MusicService extends Service {      private MediaPlayer player;      @Override      public IBinder onBind(Intent intent) {          // TODO Auto-generated method stub          return null;      }            public void onStart(Intent intent, int startId)      {          super.onStart(intent, startId);          player = MediaPlayer.create(this, R.raw.beep);          player.setLooping(true);        player.start();      }      public void onDestroy()      {          super.onDestroy();          if(player != null){            player.stop();              }    }    }  



更多相关文章

  1. Android实现app内部更改系统时间(需要手机root)
  2. android 闹钟的实现
  3. TimePicker DatePicker 简单说明
  4. 获取Android系统时间是24小时制还是12小时制
  5. Android时间日期转换
  6. Android之targetSdkVersion详解
  7. Android(安卓)YUV视频数据叠加时间信息
  8. android应用框架搭建------工具类(StringUtils)
  9. android studio点击start a new... 无反应

随机推荐

  1. 如何将标记中的值传递给PHP变量?
  2. HTML语言中img标签的alt属性和title属性
  3. 使用 html5 svg 绘制图形
  4. XSL:包括根本不工作
  5. 在不可见的webbrowser对象中模拟按键C#
  6. jquery将html转换为字符串和html
  7. img在div中不按百分比调整大小
  8. 为什么代码放到DW里运行,和用记事保存为H
  9. cordova HTML5第一次尝试
  10. jQuery SerialScroll:将类添加到活动项