2

PhoneStateListener を停止するのに問題があります。unregisterReceiver() を使用しようとしましたが、うまくいきませんでした。サイトを読んだところ、LISTEN.NON を使用する必要があることがわかりましたが、使用できません。

私の質問は次のとおり
です。私のコードで?
2 - unregisterReceiver を使用する必要がありますか?

私のコードは説明するのが簡単ではなく、非常に長いので、すべてのコードを示すのではなく、メイン ビューだけを示します。

実際:タイマーからサービスを開始します。このサービスはBRを登録します

/* 最初の1つ */

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

1 に答える 1