Android实现一个具有日程提醒功能,能自己输入事件和输入时间,到时间会响起声音的代码和布局文件
时间: 2024-03-10 09:49:31 浏览: 21
好的,以下是一个简单的实现日程提醒的Android应用的代码和布局文件。
首先是布局文件 `activity_main.xml`:
```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<EditText
android:id="@+id/event_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入事件" />
<EditText
android:id="@+id/time_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/event_edit_text"
android:hint="输入时间,格式为HH:mm:ss" />
<Button
android:id="@+id/set_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/time_edit_text"
android:layout_alignParentEnd="true"
android:text="设置提醒" />
</RelativeLayout>
```
这个布局文件包含两个输入框和一个设置提醒的按钮,用户可以在输入框中输入事件和时间,点击按钮设置提醒。
接下来是 `MainActivity.java` 中的代码:
```java
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private EditText eventEditText;
private EditText timeEditText;
private Button setButton;
private AlarmManager alarmManager;
private PendingIntent pendingIntent;
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
eventEditText = findViewById(R.id.event_edit_text);
timeEditText = findViewById(R.id.time_edit_text);
setButton = findViewById(R.id.set_button);
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(this, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
mediaPlayer = MediaPlayer.create(this, R.raw.alarm_sound);
setButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String event = eventEditText.getText().toString();
String time = timeEditText.getText().toString();
if (event.isEmpty() || time.isEmpty()) {
Toast.makeText(MainActivity.this, "事件和时间不能为空", Toast.LENGTH_SHORT).show();
return;
}
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
Date date = null;
try {
date = sdf.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
long triggerTime = calendar.getTimeInMillis();
if (triggerTime < System.currentTimeMillis()) {
Toast.makeText(MainActivity.this, "时间必须晚于当前时间", Toast.LENGTH_SHORT).show();
return;
}
alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + triggerTime - System.currentTimeMillis(),
pendingIntent);
Toast.makeText(MainActivity.this, "提醒已设置", Toast.LENGTH_SHORT).show();
}
});
}
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
mediaPlayer.start();
Toast.makeText(context, eventEditText.getText().toString(), Toast.LENGTH_LONG).show();
}
}
}
```
这个代码中,`MainActivity` 中的 `setButton` 的点击事件会解析用户输入的时间字符串,计算出提醒时间的 `triggerTime`,并使用 `AlarmManager` 设置定时提醒。在 `AlarmReceiver` 中,会响起声音并弹出提醒事件的 `Toast`。
需要注意的是,在 `AndroidManifest.xml` 文件中需要添加以下代码:
```xml
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<receiver android:name=".MainActivity$AlarmReceiver" />
```
这个代码添加了两个权限声明,以及 `MainActivity` 中的 `AlarmReceiver` 的声明。
希望这个代码对你有所帮助!