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.