Phone state listener called multiple times

android

Solution

Some how , i solved it. the problem is that when ever my broadcast receiver's onReceive() was invoked ,every time i was trying to listen a new PhoneStateListener.You just need to do it once. just like following

package com.example.netlogger.Receiver;

import java.util.Date;

import com.example.netlogger.util.LocalDatabase;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;

public class CallActionsReceiver extends BroadcastReceiver {
    static ThePhoneStateListener phoneStateListener;



    @Override
    public void onReceive(Context arg0, Intent arg1) {
        TelephonyManager manager = (TelephonyManager) arg0
                .getSystemService(arg0.TELEPHONY_SERVICE);      
        if (phoneStateListener == null) {
            phoneStateListener = new ThePhoneStateListener(arg0);
            manager.listen(phoneStateListener,
                    android.telephony.PhoneStateListener.LISTEN_CALL_STATE);
        }


    }

}

Problem solved. Cheers

Problem

hi i want to log the incoming number to the database. i am using broadcast receiver to listen for phone calls and using phone state listener. here is my code ThePhoneStateListener.java ``` package com.example.netlogger.Receiver; import android.content.Context; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.util.Log; public class ThePhoneStateListener extends PhoneStateListener { Context context; public ThePhoneStateListener(Context context) { this.context = context; } @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); if (state == TelephonyManager.CALL_STATE_OFFHOOK) { Log.d("TAGG", "Insert: " + incomingNumber); } } } ``` CallActionReceiver.java ``` package com.example.netlogger.Receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.TelephonyManager; import android.util.Log; import android.widget.Toast; public class CallActionsReceiver extends BroadcastReceiver { @Override public void onReceive(Context arg0, Intent arg1) { TelephonyManager manager = (TelephonyManager) arg0 .getSystemService(arg0.TELEPHONY_SERVICE); manager.listen(new ThePhoneStateListener(arg0), android.telephony.PhoneStateListener.LISTEN_CALL_STATE); } } ``` Menifest.xml ``` <receiver android:name="com.example.netlogger.Receiver.CallActionsReceiver"> <intent-filter android:priority="2147483647"> <action android:name="android.intent.action.PHONE_STATE"/> </intent-filter> <intent-filter android:priority="2147483647"> <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> </intent-filter> </receiver> ``` in `ThePhoneStateListener`onCallStateChanged() why it is called multiple times. i want to insert incoming number to database just once.

Original source