我有问题要停止PhoneStateListener。我试图使用unregisterReceiver()但它没有用。我确实阅读了网站,看到我必须使用LISTEN.NON,但我无法做到。
我的问题如下:
1 - 我在哪里放置“telephony.listen(listener,PhoneStateListener.LISTEN_NONE);”在我的代码中?
2 - 我是否必须使用unregisterReceiver?
我的代码不容易解释而且很长,所以我不会提供所有代码而只是主视图。
实际上:我从计时器启动服务。此服务注册BR
/ *第一个* /
public class TmrSettingsCheck extends BroadcastReceiver
{
public void setTimer(long milli)
{ // setRepeating }
public void onReceive(Context context, Intent intent)
{
// Try to know if we have to start or stop the service
context.startService(new Intent(context, SvcCall.class));
OR
context.stopService(new Intent(context, SvcCall.class));
}
}
/ *第二个* /
public class SvcCall extends Service
{
private BroadcastReceiver br_call;
public void onCreate()
{ // Creation }
public int onStartCommand(Intent intent, int flags, int startId)
{
// register the broadcast receiver
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_OUT);
filter.addAction(ACTION_IN);
this.br_call = new CallBR(this._context);
this.registerReceiver(this.br_call, filter);
return (START_STICKY);
}
public class CallBR extends ClsCallReceiver
{
public CallBR(Context context)
{ // constructor }
protected void onIncomingCallStarted(String number, Date start)
{ // XYZ
}
protected void onIncomingCallEnded(String number, Date start, Date end)
{ // XYZ }
protected void onOutgoingCallStarted(String number, Date start)
{ // XYZ }
protected void onOutgoingCallEnded(String number, Date start, Date end)
{ // XYZ }
protected void onMissedCall(String number, Date start)
{ // XYZ }
}
public IBinder onBind(Intent intent)
{ return null; }
public void onDestroy()
{
this.unregisterReceiver(this.br_call);
super.onDestroy();
}
}
/ *第三个* /
public abstract class ClsCallReceiver extends BroadcastReceiver
{
public static PhonecallStartEndDetector listener;
String outgoingSavedNumber;
protected Context savedContext;
TelephonyManager telephony;
public void onReceive(Context context, Intent intent)
{
savedContext = context;
if (listener == null)
listener = new PhonecallStartEndDetector();
if (intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL"))
{
listener.setOutgoingNumber(intent.getExtras().getString("android.intent.extra.PHONE_NUMBER"));
return;
}
this.telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
this.telephony.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
}
public class PhonecallStartEndDetector extends PhoneStateListener
{
public PhonecallStartEndDetector()
{ // XYZ }
public void onCallStateChanged(int state, String incomingNumber)
{ // XYZ }
}
protected abstract void onIncomingCallStarted(String number, Date start);
protected abstract void onOutgoingCallStarted(String number, Date start);
protected abstract void onIncomingCallEnded(String number, Date start, Date end);
protected abstract void onOutgoingCallEnded(String number, Date start, Date end);
protected abstract void onMissedCall(String number, Date start);
}
答案 0 :(得分:4)
使用LISTEN_NONE作为listen方法的参数来停止侦听更新。这将使听众听不到。
telephonymanager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE );