MainActivity:
package com.jimmytrivedi.alarmdemo;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TimePicker;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Calendar;
import butterknife.BindView;
import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = MainActivity.class.getSimpleName();
@BindView(R.id.timePicker)
TimePicker timePicker;
@BindView(R.id.buttonAlarm)
Button buttonAlarm;
@BindView(R.id.cancelAlarm)
Button cancelAlarm;
private AlarmManager alarmManager;
private PendingIntent pendingIntent;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
cancelAlarm.setEnabled(false);
selClickListener();
}
private void selClickListener() {
buttonAlarm.setOnClickListener(this);
cancelAlarm.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.buttonAlarm:
Calendar calendar = Calendar.getInstance();
if (Build.VERSION.SDK_INT >= 23) {
calendar.set(
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH),
timePicker.getHour(), timePicker.getMinute(), 0);
} else {
calendar.set(
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH),
timePicker.getCurrentHour(), timePicker.getCurrentMinute(), 0);
}
setAlarm(calendar.getTimeInMillis());
showLog("getTimeInMillis: "+calendar.getTimeInMillis() );
cancelAlarm.setEnabled(true);
break;
case R.id.cancelAlarm:
cancelAlarm();
break;
}
}
private void setAlarm(long time) {
//creating a new intent specifying the broadcast receiver
Intent intent = new Intent(this, MyAlarm.class);
intent.putExtra("REMINDER_ID", "1");
//creating a pending intent using the intent
pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
//setting the repeating alarm that will be fired every day
alarmManager.setRepeating(AlarmManager.RTC, time, AlarmManager.INTERVAL_DAY, pendingIntent);
Toast.makeText(this, "Alarm is set", Toast.LENGTH_SHORT).show();
}
private void cancelAlarm() {
pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
alarmManager.cancel(pendingIntent);
Toast.makeText(this, "Canceled", Toast.LENGTH_SHORT).show();
}
private void showLog(String msg) {
Log.d(TAG, msg);
}
}
Класс MyAlarm:
package com.jimmytrivedi.alarmdemo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.provider.Settings;
import android.util.Log;
public class MyAlarm extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String id = intent.getStringExtra("REMINDER_ID");
Log.d("Test", "ID: "+ id) ;
MediaPlayer mediaPlayer = MediaPlayer.create(context, Settings.System.DEFAULT_RINGTONE_URI);
mediaPlayer.start();
Log.d("Test", "Alarm just fired") ;
}
}
В MainActivity у меня есть один метод setAlarm
, использующий этот метод, я вызываю намерение для класса получателя. Не знаете, почему намерение становится нулевым? Кстати, по приему звонил и работает другими вещами. Напоминание также идет. И я также напечатал журналы, это: (Log.d («Тест», «Тревога только что сработала»);) также печатает.
Почему?
Любая помощь?