Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通知在使用cancel()后关闭并重新打开;_Java_Android_Countdown - Fatal编程技术网

Java 通知在使用cancel()后关闭并重新打开;

Java 通知在使用cancel()后关闭并重新打开;,java,android,countdown,Java,Android,Countdown,我的应用程序有问题。我有两个按钮开始和停止,当我点击开始通知是创建和更新的倒计时计时器的每一个滴答声,但我想关闭通知时,停止按钮被按下。我使用了notificationmanager.cancel(id),但通知已关闭并重新打开。我做错了什么?这是我的密码: private void startButtonClick() { try { time = Integer.parseInt(timeInMinutes.getText().toString());

我的应用程序有问题。我有两个按钮开始和停止,当我点击开始通知是创建和更新的倒计时计时器的每一个滴答声,但我想关闭通知时,停止按钮被按下。我使用了notificationmanager.cancel(id),但通知已关闭并重新打开。我做错了什么?这是我的密码:

private void startButtonClick() {
    try {
        time = Integer.parseInt(timeInMinutes.getText().toString());
        if (time == 0) {
            throw new NumberFormatException("Time can't be lower than 1");
        }
        startButton.setVisibility(View.INVISIBLE);
        pauseButton.setVisibility(View.VISIBLE);
        timeInMinutes.setVisibility(View.INVISIBLE);
        countDownTextView.setVisibility(View.VISIBLE);
        final NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(this)
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setLargeIcon(BitmapFactory.decodeResource(getApplicationContext().getResources(), R.mipmap.ic_launcher))
                        .setContentTitle("Timer")
                        .setContentText("12312312");
        notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        new CountDownTimer(time * 60000, 500) {
            public void onTick(long millisUntilFinished) {
                if (isCanceled) {
                    cancel();
                    buttonsVisibility();
                    isCanceled = false;
                }
                int minutes = (int) (millisUntilFinished / 1000) / 60;
                int seconds = (int) (millisUntilFinished / 1000) % 60;
                countDownTextView.setText("Time left: " + String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds));
                mBuilder.setContentText("Time left: " + String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds));
                notificationManager.notify(3, mBuilder.build());
            }

            public void onFinish() {
                turnOffBluetooth();
                turnOffWiFi();
                turnOffAudio();
                turnOnSilentMode();
                buttonsVisibility();
                notificationManager.cancel(3);
            }
        }.start();
    }
    catch (NumberFormatException e){
        Toast.makeText(getApplicationContext(), "Enter time. Only numbers!", Toast.LENGTH_SHORT).show();
    }
}
private void pauseButtonClick() {
    Toast.makeText(getApplicationContext(), "Timer off", Toast.LENGTH_LONG).show();
    startButton.setVisibility(View.VISIBLE);
    pauseButton.setVisibility(View.INVISIBLE);
    isCanceled = true;
    NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.cancel(3);
}
修改onTick()方法,如下所示:

public void onTick(long millisUntilFinished) {
      if (isCanceled) {
          cancel();
          buttonsVisibility();
          //isCanceled = false;   //comment or delete this line               
      }else{
          int minutes = (int) (millisUntilFinished / 1000) / 60;
          int seconds = (int) (millisUntilFinished / 1000) % 60;
          countDownTextView.setText("Time left: " + String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds));
          mBuilder.setContentText("Time left: " + String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds));
          notificationManager.notify(3, mBuilder.build()); //only notify when isCanceled is false
      }                    
}

即使您已取消计时器,但尚未完成该方法,因此它将继续执行,以避免您尝试此操作

if (isCanceled) {
                    cancel();
                    isCanceled = false;
                } else {
                    int minutes = (int) (millisUntilFinished / 1000) / 60;
                    int seconds = (int) (millisUntilFinished / 1000) % 60;
                    mBuilder.setContentText(
                        "Time left: " + String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds));
                    notificationManager.notify(3, mBuilder.build());
                }