程序描述:实现备忘录的设置和提醒,当运行软件时,在主界面可以设定备忘录内容,单击"设置闹钟"按钮设置提醒的时间。每设置一个备忘录,会在按钮下方记录所设定的备忘录,方便用户查看。当设定备忘录的时间到时,在主界面上自动弹出一个对话框。
程序效果图:
给出布局文件:
<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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="备忘录内容:"
/>
<EditText
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
/>
</LinearLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置闹铃"
android:id="@+id/btn"
android:layout_marginTop="5dp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv"
/>
</LinearLayout>
布局比较简单,垂直排列。
下面给出功能代码:
package com.example.memodemo;
import java.util.Calendar;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText et;
private Button btn;
private TextView tv;
private int count;
private StringBuilder sb;
private String msg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sb = new StringBuilder();
Bundle bundle = this.getIntent().getExtras();
if(bundle != null){
new AlertDialog.Builder(MainActivity.this)
.setIcon(null)
.setTitle("温馨提示")
.setMessage("备忘录时间到了,请注意")
.setPositiveButton("关闭", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MainActivity.this.finish();
}
})
.create().show();
}
InitViews();
}
private void InitViews() {
et = (EditText) findViewById(R.id.et);
btn = (Button) findViewById(R.id.btn);
tv = (TextView) findViewById(R.id.tv);
final Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());//设置当前时间为c的时间
final int hour = c.get(Calendar.HOUR_OF_DAY);
final int minute = c.get(Calendar.MINUTE);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
msg = et.getText().toString().trim();
sb.append(count++);
sb.append("备忘录的内容为:");
sb.append(msg);
sb.append("\n");
tv.setText(sb.toString().trim());
new TimePickerDialog(
MainActivity.this,
new TimePickerDialog.OnTimeSetListener(){
@Override
public void onTimeSet(TimePicker view,int hourOfDay, int minute) {
c.setTimeInMillis(System.currentTimeMillis());
c.set(Calendar.HOUR_OF_DAY, hourOfDay);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
AlarmManager am = (AlarmManager) MainActivity.this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(MainActivity.this,AlarmReceive.class);
PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
String tempHour = (hour+"").length()>1?hour+"":"0"+hour;
String tempMinute = (minute+"").length()>1?minute+"":"0"+minute;
Toast.makeText(MainActivity.this, "设置时间为:"+tempHour+":"+tempMinute, Toast.LENGTH_SHORT).show();
}
},
hour,
minute,
true).show();
}
});
}
}
当点击按钮时,会弹出一个时间提示框,该控件可以参考博客:设定好时间后,获取系统提供的闹钟服务,将当前设定的时间传入闹钟第二个参数:
AlarmManager am = (AlarmManager) MainActivity.this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(MainActivity.this,AlarmReceive.class);
PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
然后通过广播监听该闹铃,如果时间一到,广播接受者发送一个消息到主界面,在主界面判断传入的Bunble是否为空,不为空,则提示备忘录时间到了。代码如下:
package com.example.memodemo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
public class AlarmReceive extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent tempIntent = new Intent(context,MainActivity.class);
Bundle bundle = new Bundle();
bundle.putString("msg", "msg");
tempIntent.putExtras(bundle);
tempIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//设置新的task
context.startActivity(tempIntent);
}
}
然后需要在清单文件注册该广播:
<receiver android:name=".AlarmReceive" android:process=":remote"></receiver>
代码链接: