【问题标题】:Alarm keeps ringing even if i press the stop button即使我按下停止按钮,闹钟也会响起
【发布时间】:2016-12-29 00:02:09
【问题描述】:

我做了一个闹钟,它几乎可以正常工作,只是它永远不会停止。 即使我按下停止警报按钮,它也会一直响。

我有两个按钮,一个 ID 为 setthealarm,另一个 ID 为 stopthealarm

在公共类MainActivity我定义TimePickerPendingIntentAlarmManager

public class activity_mainnew extends Activity {
TimePicker alarmTimePicker;
    PendingIntent pendingIntent;
    AlarmManager alarmManager;



@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mainnew);
alarmTimePicker = (TimePicker) findViewById(R.id.timePicker);
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
}

设置时间onClick:

@RequiresApi(api = Build.VERSION_CODES.M)
    public void setthealarm(View view){
        Toast.makeText(activity_mainnew.this, "ALARM ON", Toast.LENGTH_SHORT).show();
        long time;

        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getHour());
        calendar.set(Calendar.MINUTE, alarmTimePicker.getMinute());

        Intent intent = new Intent(this, AlarmReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

        alarmTimePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);

        time = (calendar.getTimeInMillis()-(calendar.getTimeInMillis()%60000));
        if(System.currentTimeMillis()>time)
        {
            if (calendar.AM_PM == 0)
                time = time + (1000*60*60*12);
            else
                time = time + (1000*60*60*24);
        }
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, time, 10000, pendingIntent);
    }

然后停止警报onClick:

@RequiresApi(api = Build.VERSION_CODES.M)
public void stopthealarm(View view){
    Toast.makeText(activity_mainnew.this, "ALARM OFF", Toast.LENGTH_SHORT).show();
    Intent intent = new Intent(this, AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
    alarmManager.cancel(pendingIntent);
    pendingIntent.cancel();
}

在我的 AlarmReceiver 类中,我有以下内容:

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);

        if (alarmUri == null) {
        alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        }

        Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri);
        ringtone.play();
    }
}

知道为什么铃声不会停止吗?

【问题讨论】:

标签: android ringtonemanager


【解决方案1】:

要正确取消警报,您需要让 PendingIntent 使用 FLAG_UPDATE_CURRENT 标志。

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, AlarmReceiver.REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);

还在您的 AlarmReceiver 类的开头,onReceive() 之前添加一个请求代码行:

public static final int REQUEST_CODE = 222;

在点击停止按钮时停止铃声上的来电stop()

Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri);
ringtone.stop();

【讨论】:

  • 我尝试了一切都没有运气...你能把你的代码调整到我的吗?请 nick?
【解决方案2】:

这可能是因为您没有在这个问题中粘贴代码,但我实际上没有看到将 stopthealarm 连接到按钮 onclick 的代码。您确定 stopthealarm 功能会触发吗?

你这样做是为了setthealarm,而不是为了stopthealarm

setthetime onclick:

亲切的问候

【讨论】:

  • 我忘记写了..按钮功能都可以工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多