Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在更改活动时停止PhoneStateListener_Java_Android_Phone State Listener - Fatal编程技术网

Java 如何在更改活动时停止PhoneStateListener

Java 如何在更改活动时停止PhoneStateListener,java,android,phone-state-listener,Java,Android,Phone State Listener,我在活动中定义了PhoneStateListener,并希望在更改活动时停止侦听器。我试着用这段代码来实现它,但它不起作用 public class OriginActivity extends AppCompatActivity{ private TelephonyManager tManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate

我在活动中定义了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);
    }
}

我做错了什么

我找到了解决办法

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

}

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

可以在服务因某种原因停止时完成(比如用户单击停止按钮)

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