有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓如何在Java中停止闹钟铃声?

安卓工作室的新手,跟随YouTube指南开始使用闹钟应用程序。它似乎工作得很好,但是当闹钟开始播放,我点击按钮停止闹钟时,它并没有停止铃声服务。我试着研究其他堆栈溢出问题,但自己找不到合乎逻辑的答案。我知道我的意图不会触发receiver类中的ringtone服务停止。有人知道如何从mainactivityclass停止铃声服务并将触发器发送到receiver类吗

用于触发报警和播放铃声的Main活动代码

public void setTimer(View v){
        //Make alarmmanager
        AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);

        Date currentTime = Calendar.getInstance().getTime();

        Calendar cal_alarm = Calendar.getInstance();
        Calendar cal_now = Calendar.getInstance();

        cal_now.setTime(currentTime);
        cal_alarm.setTime(currentTime);

        cal_alarm.set(Calendar.HOUR_OF_DAY,mHour);
        cal_alarm.set(Calendar.MINUTE,mMin);
        cal_alarm.set(Calendar.SECOND,0);

        if (cal_alarm.before(cal_now)){
            cal_alarm.add(Calendar.DATE,1);
        }
        //Add alarm to ArrayList
        Alarms.add(cal_alarm);
        showAlarm();

        Intent i = new Intent(MainActivity.this,MyBroadcastReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 1, i, 0);
        alarmManager.set(AlarmManager.RTC_WAKEUP,cal_alarm.getTimeInMillis(), pendingIntent);

    }

    //Stop Alarm
    public void cancelAlarm(View v){

        Intent i = new Intent(getApplicationContext(), MyBroadcastReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 1, i, 0);
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

        alarmManager.cancel(pendingIntent);
        pendingIntent.cancel();
        alarmview.setText("Alarm cancelled");
    }

接收级

public void onReceive(Context context, Intent intent) {
        //Set vibration
        Vibrator vibrator = (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE);
        vibrator.vibrate(3000);

        //Make notification for alarm
        Notification notification = new Notification.Builder(context).setContentTitle("WakeMeYup").setContentText("Wake up!").setSmallIcon(R.mipmap.ic_launcher).build();

        //Pass notification to Android system
        NotificationManager manager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
        notification.flags|= Notification.FLAG_AUTO_CANCEL;
        manager.notify(0, notification);

        //Play ringtone
        Uri notificati = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
        Ringtone r = RingtoneManager.getRingtone(context, notificati);
        r.play();

        }

    }

任何帮助都将不胜感激


共 (1) 个答案

  1. # 1 楼答案

    最后我制作了一个Ringtone类,它接收一个int值,决定是播放还是停止闹钟。onclick侦听器将一条额外的消息放入intent中,该消息由ringtone类拾取并读取,以便它知道要运行的代码位