实现Alarm闹钟。程序主界面包含3个功能按钮,分别用来启动单次Alarm、启动周期Alarm、停止周期Alarm。当定时到时,有Toast提示同时播放音乐。(提示:在BroadcastReceiver的onReceived()方法中加入音乐处理。)
时间: 2023-09-22 21:06:18 浏览: 190
### 回答1:
好的,这是一个比较完整的Alarm闹钟的实现过程,需要包括代码和布局文件:
1. 在布局文件中添加3个按钮和一个TextView用来显示当前设置的Alarm时间:
```xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn_once_alarm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="单次Alarm" />
<Button
android:id="@+id/btn_period_alarm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="周期Alarm" />
<Button
android:id="@+id/btn_stop_alarm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="停止Alarm" />
</LinearLayout>
<TextView
android:id="@+id/tv_alarm_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:textSize="24sp"
android:textStyle="bold"
android:gravity="center_horizontal" />
```
2. 在Activity中添加控件引用和点击事件处理:
```java
public class MainActivity extends AppCompatActivity {
private Button btnOnceAlarm;
private Button btnPeriodAlarm;
private Button btnStopAlarm;
private TextView tvAlarmTime;
private AlarmManager alarmManager;
private PendingIntent pendingIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnOnceAlarm = findViewById(R.id.btn_once_alarm);
btnPeriodAlarm = findViewById(R.id.btn_period_alarm);
btnStopAlarm = findViewById(R.id.btn_stop_alarm);
tvAlarmTime = findViewById(R.id.tv_alarm_time);
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
btnOnceAlarm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setOnceAlarm();
}
});
btnPeriodAlarm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setPeriodAlarm();
}
});
btnStopAlarm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopPeriodAlarm();
}
});
}
private void setOnceAlarm() {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
Intent intent = new Intent(this, AlarmReceiver.class);
intent.putExtra("is_period", false);
pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
tvAlarmTime.setText("单次Alarm时间:" + sdf.format(calendar.getTime()));
}
private void setPeriodAlarm() {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
Intent intent = new Intent(this, AlarmReceiver.class);
intent.putExtra("is_period", true);
pendingIntent = PendingIntent.getBroadcast(this, 1, intent, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
5 * 1000, pendingIntent);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
tvAlarmTime.setText("周期Alarm时间:" + sdf.format(calendar.getTime()));
}
private void stopPeriodAlarm() {
if (pendingIntent != null) {
alarmManager.cancel(pendingIntent);
tvAlarmTime.setText("");
}
}
}
```
3. 实现BroadcastReceiver用来接收Alarm触发事件并处理音乐播放:
```java
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
boolean isPeriod = intent.getBooleanExtra("is_period", false);
if (isPeriod) {
Toast.makeText(context, "周期Alarm触发", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "单次Alarm触发", Toast.LENGTH_SHORT).show();
}
// 播放音乐
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.alarm_music);
mediaPlayer.setLooping(true);
mediaPlayer.start();
}
}
```
4. 添加音乐文件到res/raw目录下,命名为alarm_music.mp3。
5. 在AndroidManifest.xml中添加权限和声明BroadcastReceiver:
```xml
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
...>
<receiver android:name=".AlarmReceiver" />
</application>
```
以上就是实现Alarm闹钟的全部过程。
### 回答2:
实现Alarm闹钟需要创建一个Android应用程序。程序主界面包含三个功能按钮,分别是"启动单次Alarm"、"启动周期Alarm"和"停止周期Alarm"。下面是程序的实现思路和步骤:
1. 创建一个MainActivity作为主界面,添加三个Button控件,并给它们分别设置onClick事件。
2. 在点击"启动单次Alarm"按钮时,创建一个AlarmManager对象,并使用set方法设置定时时间,同时创建一个PendingIntent对象用于启动AlarmReceiver广播接收器。在PendingIntent中添加一个Action和其他附加数据。并使用AlarmManager的set方法启动定时任务。
3. 创建一个AlarmReceiver广播接收器类,并在其onReceive方法中加入音乐处理。当Alarm时间到达时,系统会发送一个广播,AlarmReceiver可以接收到广播,并在onReceive方法中播放音乐,可以使用MediaPlayer来实现音乐播放。
4. 在点击"启动周期Alarm"按钮时,与步骤2类似,只是在设置定时时间时需要使用setRepeating方法来设置周期性闹钟。
5. 在点击"停止周期Alarm"按钮时,先取消之前设置的Alarm,通过调用AlarmManager的cancel方法,传入之前设置的PendingIntent对象即可。
6. 在Toast提示和音乐播放时,可以使用Toast.makeText方法显示Toast提示信息,并调用MediaPlayer的start方法播放音乐。
7. 最后,运行程序,在界面上点击不同的按钮,可以实现不同类型的闹钟功能。
以上是一个简单的实现Alarm闹钟的思路和步骤,根据实际需求和具体的开发环境,还可以进行更详细的功能和界面设计。
### 回答3:
实现Alarm闹钟需要使用Android的AlarmManager类来设置定时任务,并使用BroadcastReceiver来处理定时任务触发时的事件。
首先,我们需要创建一个主界面,包含三个功能按钮,分别是"启动单次Alarm"、"启动周期Alarm"和"停止周期Alarm"。当用户点击对应的按钮时,我们可以使用Intent来启动一个服务(Service)来执行相应的任务。
1. 启动单次Alarm:当用户点击"启动单次Alarm"按钮时,我们可以通过AlarmManager类的set()方法来设置一个定时任务,同时指定一个PendingIntent,在定时任务触发时会发送一个广播BroadcastIntent。我们可以通过BroadcastReceiver监听这个广播,并在onReceive()方法中处理事件。在onReceive()方法中,我们可以使用Toast来显示定时任务已触发,并调用MediaPlayer类来播放音乐。
2. 启动周期Alarm:当用户点击"启动周期Alarm"按钮时,我们可以通过AlarmManager类的setRepeating()方法来设置一个周期性的定时任务。与单次Alarm类似,我们也需要定义一个BroadcastReceiver来处理定时任务触发时的事件,其中包括显示Toast提示和播放音乐的逻辑。
3. 停止周期Alarm:当用户点击"停止周期Alarm"按钮时,我们可以通过AlarmManager类的cancel()方法来取消之前设置的周期性定时任务。此时,我们也可以显示Toast提示定时任务已取消,并停止播放音乐。
总结:实现Alarm闹钟需要使用Android的AlarmManager和BroadcastReceiver来设置和处理定时任务。在定时任务触发时,使用Toast来提示用户,并通过MediaPlayer类来播放音乐。以上就是实现Alarm闹钟的基本思路和步骤。
阅读全文