2017-04-01 64 views
0

我有一个按钮(“检查”),它开始倒计时,当到达零时,手机振动。再次按下“检查”将关闭振动,并且过程重新开始。随时按下“提醒”将短信发送至预先指定的号码。这是我的代码,到目前为止,它的工作正常。但我想连接这些功能,以便振动一旦开始,用户有十秒钟时间点击“检查”并重新启动定时器,否则“警报”功能将开始发送短信。我会怎么做呢?我需要制作另一个倒数计时器吗?到目前为止如果在10秒内没有再次按下按钮,发送警报

“检查” 按钮的代码:

check.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       vibe.cancel(); 
       if (countDownTimer != null) 
        countDownTimer.cancel(); 

       countDownTimer = new CountDownTimer(timerTime * 1000, 1000) { 

        @Override 
        public void onTick(long milliseconds) { 
         long minutes = milliseconds/60000; 
         long seconds = (milliseconds/1000) % 60; 
         minsLeft.setText(getString(R.string.minutes) + (int) (minutes) + " seconds:" + (int) (seconds)); 

        } 

        @Override 
        public void onFinish() { 
         minsLeft.setText("Are You OK?"); 
         long[] pattern = {100, 1000, 100, 2}; 
         vibe.vibrate(pattern, 1); 
        } 
       }.start(); 
      } 
     }); 
    } 

“警报” 按钮的代码(这将被称为如果 “检查” 并没有再次按下):

public void onAlertClick(View view) { 
     Toast sent = Toast.makeText(getApplicationContext(), "Alert Sent", Toast.LENGTH_SHORT); 
     Toast permissions = Toast.makeText(getApplicationContext(), "Please change app permissions in settings", Toast.LENGTH_SHORT); 


     try { 
      SmsManager.getDefault().sendTextMessage(getString(R.string.smsNumber), null, 
        getString(R.string.smsMessage), null, null); 
      sent.show(); 

     } catch (Exception e) { 
      permissions.show(); 
     } 
    } 
+1

请仅将android studio标签用于常规编程问题 - 这是关于工具本身的问题。 – EJoshuaS

+0

你已经在这里展示了很多代码,这很好,但你没有太多的解释它的问题。 logcat中有错误吗?有没有像你期望的那样发生?你期望什么?如果你在这里提供更多的细节,你可能会吸引更多(和更好的)答案。 – HPierce

+0

@HPierce(和EJoshuaS)我对我的问题和标签做了一些修改。我不确定我可以做得更具体,因为我不知道从哪里开始。然而,我已经做了一些修改来澄清我的问题。希望有帮助。 –

回答

0

我想要做的是在第一个定时器完成时创建一个对话框片段,然后在该对话框片段中有另一个定时器倒计时10秒 - 如果对话框计时器命中0,然后执行您的警报方法:

(p。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/session_text" 
    android:textSize="20sp" 
    android:textStyle="bold" 
    android:layout_gravity="center" 

    /> 

</LinearLayout> 

:您可以嵌套这个类主类里面,所以你可以在你的第一个倒计时器更容易)

public static class SessionExpiringDialog extends DialogFragment { 
    CountDownTimer countDownTimer2; 
    public SessionExpiringDialog() { 
     super(); 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     final View view = inflater.inflate(R.layout.session_dialog, null); 
     final TextView sessionText = (TextView) view.findViewById(R.id.session_text); 
     countDownTimer2 = new CountDownTimer2(11000, 1000) { 
      @Override 
      public void onTick(long millisUntilFinished) { 
       long diffSeconds = millisUntilFinished/1000 % 60; 
       sessionText.setText("SMS Alert will be sent in: " + diffSeconds + " seconds."); 
      } 

      @Override 
      public void onFinish() { 
       onAlertClick(view); 
      } 
     }; 
     countDownTimer2.start(); 
     builder.setView(view); 
     builder.setMessage("Alert SMS Pending").setTitle("ATTENTION:") 
       .setPositiveButton("I'm OKAY!", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         countDownTimer2.cancel(); 
         countDownTimer.start(); 
         dismiss(); 
        } 
       }); 
     return builder.create(); 
    } 
} 

这个代码假定一个布局XML存在名为res /布局/ session_dialog.xml调用然后调用这个代码,把它放在onFinish()方法,你的第一个countdowntimer的:

check.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      vibe.cancel(); 
      if (countDownTimer != null) 
       countDownTimer.cancel(); 

      countDownTimer = new CountDownTimer(timerTime * 1000, 1000) { 

       @Override 
       public void onTick(long milliseconds) { 
        long minutes = milliseconds/60000; 
        long seconds = (milliseconds/1000) % 60; 
        minsLeft.setText(getString(R.string.minutes) + (int) (minutes) + " seconds:" + (int) (seconds)); 

       } 

       @Override 
       public void onFinish() { 
        minsLeft.setText("Are You OK?"); 
        long[] pattern = {100, 1000, 100, 2}; 
        vibe.vibrate(pattern, 1); 
        SessionExpiringDialog sessionExpiringDialog = new SessionExpiringDialog(); 
        sessionExpiringDialog.setCancelable(false); 
        sessionExpiringDialog.show(getSupportFragmentManager(), "tag"); 
       } 
      }.start(); 
     } 
    }); 
} 

最后,我不明白为什么你在你的onAlertClick传递一个视图()方法,但我去先并将其包含在我的粘贴代码中