2017-04-01 20 views
0

私はゼロに達すると電話機が振動するカウントダウンを開始するボタン(「チェック」)を持っています。もう一度「チェック」を押すと、振動がオフになり、処理がやり直されます。いつでも「アラート」を押すと、あらかじめ指定された番号にSMSが送信されます。それは今までの私のコードで、それまではうまくいきました。しかし、これらの機能を接続して、振動が始まると、ユーザーは「チェック」をタップしてタイマーを再起動し、そうでなければ「警告」機能が始まり、SMSを送信するように10秒間待ちます。私はこれについてどうやって行くのですか?別のカウントダウンタイマーを作る必要はありますか?これまでボタンが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

一般的なプログラミングに関する質問にはアンドロイドスタジオタグを使用してください。ツール自体についての質問です。 – EJoshuaS

+0

あなたはここにたくさんのコードを示していますが、それはいいですが、問題を説明することはあまりありません。 logcatにエラーはありますか?あなたが期待しているようなことは起こっていませんか?あなたは何を期待しましたか?ここで詳細を述べると、より多くの(そしてより良い)回答が得られる可能性が高くなります。 – HPierce

+0

@HPierce(とEJoshuaS)私は質問とタグをいくつか変更しました。私はこれをあまりにも明確にすることができないのかどうかはわかりません。私は、しかし、私の質問を明確にするためにいくつかの変更を加えました。うまくいけば助けてくれます。 –

答えて

0

最初のタイマーが終了するとダイアログフラグメントが作成され、そのダイアログにフラグメントが10秒間カウントダウンされますタイマーが0に達すると、アラート方式を実行します。

(p.su.jp)

<?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(); 
    } 
} 

このコードは、解像度/レイアウト/ session_dialog.xmlと呼ばれるレイアウトXMLが存在すると仮定しすることができます最後に

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()メソッドでビューを渡している理由私は見ませんでしたが、私が行ってきました。そして、あなたの最初のcountdowntimerのonFinish()メソッドに入れて、このコードを呼び出すために前方に貼り付けたコードに含めてください

関連する問題