我是Android操作系统编程的初学者,这就是我决定向你求助的原因。我的问题与PhoneStateListener
有关,应根据切换按钮状态调用{<1}}:
togglebtn==ON
- 如果ServiceStateChanges或DataConnectionStateChanges - &gt;在屏幕上打印Toast
togglebtn==OFF
- 不要检查ServiceStateChanges或DataConnectionStateChanges
我发现为了停止收听,我应该将LISTEN_NONE
作为参数发送给listen方法,但它不起作用
这是我的代码的最简单版本:
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
有什么想法吗? 我期待着您的回复。
答案 0 :(得分:1)
引用the documentation for listen()
,更加强调:
要取消注册侦听器,请传递侦听器对象,并将events参数设置为LISTEN_NONE(0)。
您没有传递侦听器对象 - 您正在传递null
。您需要传递与原始PhoneStateListener
电话中使用的相同的 listen()
实例。