我有一个BroadcastReceiver类(呼叫接收器),它等待来电或去电。 当我的接收器接收呼入/呼出呼叫时,我总是将其保存到SQLite数据库。
我有一个AutoStarting类,它的工作正常,当我重新启动手机时,它始终启动我的服务。
因此,当我的服务被创建时,它总是创建一个新的呼叫接收器,因为我们总是在等待来电/去电。 它是一个STICKY服务。
当我测试我的程序时,它的工作很好,但后来......当有人在某个时候打电话给我时它错了。广播接收器无法接收有效数据,或者没有收到某些想法。
有人有想法,我做错了什么? 我希望有一个人可以帮助我。 我不在乎。
非常感谢!
服务
公共类MyService扩展了Service {
private MyReceiver rec;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
final IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.PHONE_STATE");
filter.addAction("android.intent.action.NEW_OUTGOING_CALL");
rec = new MyReceiver();
this.registerReceiver(rec, filter);
return START_STICKY;
}
}
接收机
public class MyReceiver extends BroadcastReceiver {
Bundle bundle;
String state;
String inCall, outCall;
public boolean wasRinging = false;
@Override
public void onReceive(Context context, Intent intent) {
MySingletonSQLite mySing = MySingletonSQLite.getInstance();
switch (intent.getAction())
{
case "android.intent.action.PHONE_STATE":
{
if ((bundle = intent.getExtras()) != null) {
state = bundle.getString(TelephonyManager.EXTRA_STATE);
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
inCall = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
wasRinging = true;
// Ringing
mySing.add("incoming"+inCall);
} else if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
if (wasRinging == true) {
// Live
mySing.add("already live");
}
} else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
wasRinging = false;
//Call ended
mySing.add("call ended");
}
}
break;
}
case "android.intent.action.NEW_OUTGOING_CALL":
{
if ((bundle = intent.getExtras()) != null) {
outCall = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
mySing.add("outgoing call"+outCall);
}
break;
}
}
}
}
}