Android广播服务

时间:2015-10-21 16:31:31

标签: android

我有一个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;
        }

        }

    }

}

}

0 个答案:

没有答案