想要收听来电和外出电话

时间:2013-04-24 01:37:32

标签: android android-activity android-service

我想要收听来电和拨出电话,这个过程应该作为服务运行。我做了一个可以正常识别传入和传出呼叫的活动,但我需要将其更改为服务,以便它可以运行到后台。我无法找到如何改变它。我的活动如下:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TelephonyManager mTelephonyMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    mTelephonyMgr.listen(new TeleListener(), PhoneStateListener.LISTEN_CALL_STATE);
}

class TeleListener extends PhoneStateListener
{
    public void onCallStateChanged(int state, String incomingNumber)
    {
        super.onCallStateChanged(state, incomingNumber);
        switch (state)
        {
        case TelephonyManager.CALL_STATE_IDLE:
            //CALL_STATE_IDLE;
            Toast.makeText(getApplicationContext(), "CALL_STATE_IDLE", 10000).show();
            break;
        case TelephonyManager.CALL_STATE_OFFHOOK:
            //CALL_STATE_OFFHOOK;
            Toast.makeText(getApplicationContext(), "CALL_STATE_OFFHOOK", 10000).show();
            break;
        case TelephonyManager.CALL_STATE_RINGING:
            //CALL_STATE_RINGING
            Toast.makeText(getApplicationContext(), "CALL_STATE_RINGING", 10000).show();
            break;
        default:
            break;
        }
    }

  }
}

我的第二个问题我可以将没有活动的服务安装到手机中。

2 个答案:

答案 0 :(得分:3)

只需extends Service而不是Activity。您确实需要一项活动来启动服务。您可以通过注册ACTION_BOOT_COMPLETED并启动broadcast receiver服务来启动服务。但是,从ICS向上,您需要一项活动至少启动一次服务。之后,将永远不再需要这项活动。

答案 1 :(得分:2)

您需要传递意图才能启动服务。您可以创建仅启动服务的活动,并且此活动没有视图。 让您的类扩展Service而不是Activity,并创建另一个实例化您的服务并执行startService(yourserviceInstance);

的活动