簡體   English   中英

為什么在發送LISTEN_NONE之后PhoneStateListener仍然存在

[英]Why PhoneStateListener still alive after sending LISTEN_NONE

我是Android OS編程的初學者,所以我決定尋求您的幫助。 我的問題與PhoneStateListener有關,應根據切換按鈕狀態調用它:

togglebtn==ON如果ServiceStateChanges或DataConnectionStateChanges->在屏幕上打印Toast

togglebtn==OFF不檢查ServiceStateChanges或DataConnectionStateChanges

我發現為了停止監聽,我應該發送LISTEN_NONE作為監聽方法的參數,但它不起作用

這是我的代碼的最簡單的版本:

package network.com.example;

import android.app.Activity;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;

public class MainActivity extends Activity 
{   
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);

        ToggleButton button_on_off=(ToggleButton)findViewById(R.id.toggleButton1);

        button_on_off.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() 
        {     
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
            {         
                if (isChecked) 
                {             
                    nw_update(tm , "onCRE");           

                    tm.listen(new PhoneStateListener() {
                        @Override
                        public void onServiceStateChanged(ServiceState serviceState) {          
                            nw_update(tm , "onSSC");            
                        }
                        @Override
                        public void onDataConnectionStateChanged(int state) {           
                            nw_update(tm , "onDCC");                         
                        }
                    }, PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);   
                }               
                else 
                {                            
                    tm.listen(null,  PhoneStateListener.LISTEN_NONE | PhoneStateListener.LISTEN_NONE ); 
                }
            } 
        });     // end of button on/off                        
    } // end of onCreate

    private final void nw_update(TelephonyManager tm , String rodzaj) {
        String _rodzaj = rodzaj;    
        Toast.makeText(getApplicationContext(), _rodzaj, Toast.LENGTH_SHORT).show();       
    }    
} // end of main activity

有任何想法嗎? 我期待着您的回音。

將文檔引用listen() ,重點是:

要取消注冊偵聽器,請傳遞該偵聽器對象 ,並將events參數設置為LISTEN_NONE(0)。

您沒有傳遞偵聽器對象,而是傳遞null 您需要傳遞與原始listen()調用相同的 PhoneStateListener實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM