更改活动

时间:2015-07-22 09:59:23

标签: java android phone-state-listener

我在一个活动中定义了一个PhoneStateListener,我想在我改变活动时停止监听器。我试图用这段代码来做,但它没有用。

public class OriginActivity extends AppCompatActivity{
    private TelephonyManager tManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_origin);
        tManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
        tManager.listen(new CustomPhoneStateListener(this), PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
    }

    protected void onPause() {
        super.onPause();

        // Logs 'app deactivate' App Event.
        AppEventsLogger.deactivateApp(this);

       tManager.listen(new CustomPhoneStateListener(this), PhoneStateListener.LISTEN_NONE);
    }
}

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我找到了解决方案!!!

public class OriginActivity extends AppCompatActivity{

    CustomPhoneStateListener customPhoneStateListener;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_origin);

        /**** Other Code ****/

    }

    protected void onResume() {
        super.onResume();

        //Here, we start the listener!!!
        TelephonyManager tManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
        customPhoneStateListener = new CustomPhoneStateListener(this);
        tManager.listen(customPhoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
        Log.d(TAG, "onResume");
    }

    protected void onPause() {
        super.onPause();

        //Here, we stop the listener!!!
        TelephonyManager tManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
        tManager.listen(customPhoneStateListener, PhoneStateListener.LISTEN_NONE);
        customPhoneStateListener = null;
    }

}

因此,当我们第一次访问Activity或从另一个Activity返回时,我们调用onResume()并启动监听器。而且,当我们使用onPause()退出Activity时,我们会停止监听器。

答案 1 :(得分:0)

当服务因某种原因停止时(例如用户点击停止按钮)

可以完成
@Override
public void onDestroy() {
    super.onDestroy();
    telephonyManager.listen(listener, PhoneStateListener.LISTEN_NONE);
    listener = null;
}