java - 如何停止闹钟循环响

标签 java android android-studio android-alarms

大家好,我一直在尝试向我的应用程序添加闹钟。

但是在我设置闹钟之后,它就没有停止,我会一直玩下去。

我使用的java类是警报接收器、activity-alarm.java和xml。

以及如何从通知中添加停止警报。提前致谢。

这是主要 Activity 。

` 公共(public)类 MainActivity 扩展 AppCompatActivity {

AlarmManager alarmManager;
private PendingIntent pending_intent;

private TimePicker alarmTimePicker;
private TextView alarmTextView;

private AlarmReceiver alarm;


MainActivity inst;
Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    this.context = this;

    //alarm = new AlarmReceiver();
    alarmTextView = (TextView) findViewById(R.id.alarmText);

    final Intent myIntent = new Intent(this.context, AlarmReceiver.class);

    // Get the alarm manager service
    alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

    // set the alarm to the time that you picked
    final Calendar calendar = Calendar.getInstance();

    alarmTimePicker = (TimePicker) findViewById(R.id.alarmTimePicker);



    Button start_alarm= (Button) findViewById(R.id.start_alarm);
    start_alarm.setOnClickListener(new View.OnClickListener() {
        @TargetApi(Build.VERSION_CODES.M)

        @Override
        public void onClick(View v) {

            calendar.add(Calendar.SECOND, 3);
            //setAlarmText("You clicked a button");

            final int hour = alarmTimePicker.getCurrentHour();
            final int minute = alarmTimePicker.getCurrentMinute();;

            Log.e("MyActivity", "In the receiver with " + hour + " and " + 
minute);
            setAlarmText("You clicked a " + hour + " and " + minute);


            calendar.set(Calendar.HOUR_OF_DAY, 
alarmTimePicker.getCurrentHour());
            calendar.set(Calendar.MINUTE, 
alarmTimePicker.getCurrentMinute());

            myIntent.putExtra("extra", "yes");
            pending_intent = PendingIntent.getBroadcast(MainActivity.this, 
0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

            alarmManager.set(AlarmManager.RTC_WAKEUP, 
calendar.getTimeInMillis(), pending_intent);


            // now you should change the set Alarm text so it says 
something nice


            setAlarmText("Alarm set to " + hour + ":" + minute);
            //Toast.makeText(getApplicationContext(), "You set the alarm", 
Toast.LENGTH_SHORT).show();
        }

    });

    Button stop_alarm= (Button) findViewById(R.id.stop_alarm);
    stop_alarm.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            int min = 1;
            int max = 9;

            Random r = new Random();
            int random_number = r.nextInt(max - min + 1) + min;
            Log.e("random number is ", String.valueOf(random_number));

            myIntent.putExtra("extra", "no");
            sendBroadcast(myIntent);

            alarmManager.cancel(pending_intent);
            setAlarmText("Alarm canceled");
            //setAlarmText("You clicked a " + " canceled");
        }
    });

}

public void setAlarmText(String alarmText) {
    alarmTextView.setText(alarmText);
}



@Override
public void onStart() {
    super.onStart();
    inst = this;
}


}`

最佳答案

我已经找到解决办法了。

添加此警报后停止:

    Intent intent = new Intent(this, RingtonePlayingService.class);
    PendingIntent pendingIntent =  
    PendingIntent.getBroadcast(getApplicationContext(), 1253, intent, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.cancel(pendingIntent);

工作Mainactivity.java

public class MainActivity extends AppCompatActivity {

AlarmManager alarmManager;
private PendingIntent pending_intent;

private TimePicker alarmTimePicker;
private TextView alarmTextView;

private AlarmReceiver alarm;


MainActivity inst;
Context context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    this.context = this;

    //alarm = new AlarmReceiver();
    alarmTextView = (TextView) findViewById(R.id.alarmText);

    final Intent myIntent = new Intent(this.context, AlarmReceiver.class);

    // Get the alarm manager service
    alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

    // set the alarm to the time that you picked
    final Calendar calendar = Calendar.getInstance();

    alarmTimePicker = (TimePicker) findViewById(R.id.alarmTimePicker);



    Button start_alarm= (Button) findViewById(R.id.start_alarm);
    start_alarm.setOnClickListener(new View.OnClickListener() {
        @TargetApi(Build.VERSION_CODES.M)

        @Override
        public void onClick(View v) {

            calendar.add(Calendar.SECOND, 3);
            //setAlarmText("You clicked a button");

            final int hour = alarmTimePicker.getCurrentHour();
            final int minute = alarmTimePicker.getCurrentMinute();;

            Log.e("MyActivity", "In the receiver with " + hour + " and " + 
minute);
            setAlarmText("You clicked a " + hour + " and " + minute);


            calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour());
            calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute());

            myIntent.putExtra("extra", "yes");
            pending_intent = PendingIntent.getBroadcast(MainActivity.this, 0, 
myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

            alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
pending_intent);


            // now you should change the set Alarm text so it says something nice


            setAlarmText("Alarm set to " + hour + ":" + minute);
            //Toast.makeText(getApplicationContext(), "You set the alarm", 
Toast.LENGTH_SHORT).show();
        }

    });
    Intent intent = new Intent(this, RingtonePlayingService.class);
    PendingIntent pendingIntent = 
PendingIntent.getBroadcast(getApplicationContext(), 1253, intent, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.cancel(pendingIntent);
    Button stop_alarm= (Button) findViewById(R.id.stop_alarm);
    stop_alarm.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            int min = 1;
            int max = 9;

            Random r = new Random();
            int random_number = r.nextInt(max - min + 1) + min;
            Log.e("random number is ", String.valueOf(random_number));

            myIntent.putExtra("extra", "no");
            sendBroadcast(myIntent);


            //setAlarmText("You clicked a " + " canceled");
        }
    });

}

public void setAlarmText(String alarmText) {
    alarmTextView.setText(alarmText);
}



@Override
public void onStart() {
    super.onStart();
    inst = this;
}


}

关于java - 如何停止闹钟循环响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53230292/

相关文章:

java - 调用 WebService Asp.Net 发送参数 JSON

Android为多个 Activity 存储Socket.io对象

android - 创建 View 模型的方式有什么区别?

java - 日期寄存器排序算法

android - 以编程方式添加的 Spinner 的 OnItemSelectedListener 不会触发

java - 在 IntelliJ IDEA 中运行 Ant 构建的烦恼

java - .timeout 与 RxJava 观察者

android - 如何在Android gradle中使用嵌套依赖?

java - 摄氏度始终为 0.0?

java - BufferedReader.readLine() 阻塞一段时间