处理程序不会在按钮单击时停止

时间:2016-04-17 23:09:03

标签: java android handler

我有一个runnable,它启动一个活动和一个处理程序,让5n秒后可运行的重复。但是,我实现了一个“停止按钮”,它应该停止该处理程序,但不知何故它不起作用。 我会感谢一些帮助,为什么它不会停止循环。

public class MainActivity extends Activity {

    private Button callBtn;
    private Button stopBtn;

    Handler handler = new Handler();
    Runnable redial=new Runnable(){

    @Override public void run(){Intent callIntent=new Intent(Intent.ACTION_CALL,Uri.parse("tel:+49888888"));startActivity(callIntent);

    }};

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        callBtn = (Button) findViewById(R.id.call);
        stopBtn = (Button) findViewById(R.id.stop);

        // add PhoneStateListener for monitoring
        MyPhoneListener phoneListener = new MyPhoneListener();
        TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
        // receive notifications of telephony state changes
        telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);

        callBtn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                redial.run();
            }
        });

        stopBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                handler.removeCallbacks(redial);
            }
        });

    }

    private class MyPhoneListener extends PhoneStateListener {

        private boolean onCall = false;


        public void onCallStateChanged(int state, String incomingNumber) {

            switch (state) {
                case TelephonyManager.CALL_STATE_RINGING:
                    // phone ringing...
                    Toast.makeText(MainActivity.this, incomingNumber + " calls you",
                            Toast.LENGTH_LONG).show();
                    break;

                case TelephonyManager.CALL_STATE_OFFHOOK:
                    // one call exists that is dialing, active, or on hold
                    Toast.makeText(MainActivity.this, "on call...",
                            Toast.LENGTH_LONG).show();
                    //because user answers the incoming call
                    onCall = true;
                    break;

                case TelephonyManager.CALL_STATE_IDLE:
                    // in initialization of the class and at the end of phone call

                    // detect flag from CALL_STATE_OFFHOOK
                    if (onCall == true) {
                        Toast.makeText(MainActivity.this, "restart app after call",
                                Toast.LENGTH_LONG).show();

                        // restart our application
                        Intent restart = getBaseContext().getPackageManager().
                                getLaunchIntentForPackage(getBaseContext().getPackageName());
                        restart.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(restart);

                        onCall = false;

                        handler.postDelayed(redial, 5000);


                    }
                    break;
                default:
                    break;
            }

        }

    }

0 个答案:

没有答案
相关问题