Jika tombol tidak ditekan lagi dalam 10 detik, kirimkan peringatan

Saya memiliki tombol ("periksa") yang memulai hitungan mundur, ketika mencapai nol, telepon bergetar. Menekan "centang" lagi akan mematikan getaran dan proses dimulai dari awal. Menekan "alert" kapan saja akan mengirimkan SMS ke nomor yang telah ditentukan sebelumnya. Itu adalah kode saya sejauh ini, dan sejauh ini, itu berfungsi dengan baik. Namun saya ingin menghubungkan fungsi-fungsi ini sehingga, setelah getaran dimulai, pengguna memiliki waktu sepuluh detik untuk mengetuk "periksa" dan memulai ulang pengatur waktu, atau fungsi "peringatan" akan dimulai, mengirimkan SMS. Bagaimana saya melakukan hal ini? Apakah saya perlu membuat penghitung waktu mundur lagi?

Kode tombol "periksa" sejauh ini:

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

Kode tombol "peringatan" (ini akan dipanggil jika "centang" tidak ditekan lagi):

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

person Molly Taylor    schedule 01.04.2017    source sumber
comment
Harap hanya gunakan tag android studio untuk pertanyaan pemrograman umum - ini untuk pertanyaan tentang alat itu sendiri.   -  person EJoshuaS - Reinstate Monica    schedule 01.04.2017
comment
Anda telah menunjukkan banyak kode di sini, dan itu bagus, tetapi Anda tidak berbuat banyak untuk menjelaskan masalahnya. Apakah ada kesalahan di logcat? Apakah sesuatu terjadi tidak seperti yang Anda harapkan? Apa yang kamu harapkan? Anda mungkin akan mendapatkan jawaban yang lebih banyak (dan lebih baik) jika Anda memberikan lebih banyak detail di sini.   -  person HPierce    schedule 01.04.2017
comment
@HPierce (dan EJoshuaS) Saya telah membuat beberapa perubahan pada pertanyaan dan tag saya. Saya tidak yakin saya bisa membuat ini terlalu spesifik karena saya tidak tahu harus mulai dari mana. Namun saya telah membuat beberapa perubahan untuk memperjelas pertanyaan saya. Semoga itu membantu.   -  person Molly Taylor    schedule 01.04.2017


Jawaban (1)


apa yang akan saya lakukan, adalah membuat fragmen dialog ketika pengatur waktu pertama selesai, kemudian dalam fragmen dialog itu ada pengatur waktu lain yang menghitung mundur 10 detik - jika pengatur waktu dialog mencapai 0, jalankan metode peringatan Anda:

(p.s. Anda dapat menyarangkan kelas ini di dalam kelas utama sehingga Anda dapat memanggil penghitung waktu mundur pertama dengan lebih mudah)

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

kode ini mengasumsikan ada tata letak xml yang disebut res/layout/session_dialog.xml:

<?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>

lalu untuk memanggil kode ini, masukkan ke dalam metode onFinish() pada penghitung waktu mundur pertama Anda:

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

terakhir, saya tidak mengerti mengapa Anda meneruskan tampilan dalam metode onAlertClick() Anda, tetapi saya melanjutkan dan memasukkannya ke dalam kode yang saya tempel

person buradd    schedule 01.04.2017