概述:简单闹钟的实现
- 通过点击按钮弹出日期时间对话框,选择日期时间并确定,会自动保存。当设置的时间一到就弹出一个新的Activity界面并弹出AlerDialog对话框播放系统闹钟声音。最后实现AlerDialog的取消与跳转。
主页面布局:activity.main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="邱万勇的闹钟" />
<Button
android:id="@+id/btnCalinder"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="设置时间" />
</LinearLayout>
MainActivity 的实现
public class MainActivity extends Activity {
private Button btn;
TextView tv;
AlertDialog builder = null;
Calendar c = Calendar.getInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
c.get(Calendar.YEAR);
c.get(Calendar.MONTH);
c.get(Calendar.DAY_OF_MONTH);
btn = (Button) findViewById(R.id.btnCalinder);
tv = (TextView) findViewById(R.id.tv);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setAlarmDate();
}
});
}
/**
* 设置日期
* */
private void setAlarmDate() {
final Calendar currentDate = Calendar.getInstance();
DatePickerDialog datePickerDialog = new DatePickerDialog(
MainActivity.this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, monthOfYear);
c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
setAlarmTime(year,monthOfYear,dayOfMonth);
}
}, currentDate.get(Calendar.YEAR),
currentDate.get(Calendar.MONTH),
currentDate.get(Calendar.DAY_OF_MONTH));
datePickerDialog.show();
}
/**
* 设置闹铃时间
* */
private void setAlarmTime(final int year,
final int monthOfYear, final int dayOfMonth) {
Calendar currentTime = Calendar.getInstance();
// 创建一个TimePickerDialog实例,并把它显示出来。
new TimePickerDialog(MainActivity.this, 0, // 绑定监听器
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker tp, int hourOfDay,
int minute) {
// 指定启动AlarmActivity组件
Intent intent = new Intent();
intent.setAction("com.westsoft.alarmtime.ACTION");// Activity
// 创建PendingIntent对象
PendingIntent pi = PendingIntent.getActivity(
MainActivity.this, 0, intent, 0);
Log.i("TimeInMillis", "TimeInMillis_1"+c.getTimeInMillis()+"");
// 根据用户选择时间来设置Calendar对象
c.set(Calendar.HOUR_OF_DAY, hourOfDay);
c.set(Calendar.MINUTE, minute);
String longTime=year+"-"+(monthOfYear+1)+"-"+dayOfMonth+" "+hourOfDay
+ ":" + minute;
//2016-10-25 10:44:53
tv.setText(longTime);
// 设置AlarmManager将在Calendar对应的时间启动指定组件
// 设置闹钟,当前时间就唤醒
AlarmManager alarmManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP,
c.getTimeInMillis(), pi);
Log.i("TimeInMillis", c.getTimeInMillis()+"");
// 显示闹铃设置成功的提示信息
Toast.makeText(MainActivity.this, "闹铃设置成功啦",
Toast.LENGTH_SHORT).show();
}
}, currentTime.get(Calendar.HOUR_OF_DAY), currentTime
.get(Calendar.MINUTE), true).show();
}
}
闹钟Activity界面CallAlarm
public class CallAlarm extends Activity implements OnClickListener {
public static CallAlarm context = null;
private MediaPlayer player = new MediaPlayer();
WakeLock mWakelock;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_welcome);
// 需要在AndroidManifest里面设置权限,唤醒屏幕
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakelock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.FULL_WAKE_LOCK, "AlertDialog");
mWakelock.acquire();
// 屏幕解锁,需要设置权限
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
KeyguardLock keyguardLock = keyguardManager
.newKeyguardLock("AlertDialog");
keyguardLock.disableKeyguard();
context = this;
try {
Uri localUri = RingtoneManager.getActualDefaultRingtoneUri(context,
RingtoneManager.TYPE_ALARM);
if ((player != null) && (localUri != null)) {
player.setDataSource(context, localUri);
player.prepare();
player.setLooping(false);
player.start();
}
AlertDialog.Builder localBuilder = new AlertDialog.Builder(context);
localBuilder.setTitle("计划提醒通知来啦~");
localBuilder.setMessage(getIntent().getStringExtra("content"));
localBuilder.setPositiveButton("查看", this);
localBuilder.setNegativeButton("忽略", this);
localBuilder.show();
} catch (IllegalArgumentException localIllegalArgumentException) {
localIllegalArgumentException.printStackTrace();
} catch (SecurityException localSecurityException) {
localSecurityException.printStackTrace();
} catch (IllegalStateException localIllegalStateException) {
localIllegalStateException.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON1: {
Intent intent = new Intent(CallAlarm.this, MainActivity.class);
startActivity(intent); // 启动转到的Activity
finish();
}
case DialogInterface.BUTTON2: {
// mWakelock.release();
player.stop();
finish();
}
}
}
}
参考demo请点击连接下载:下载本文参考demo