我想要收听来电和拨出电话,这个过程应该作为服务运行。我做了一个可以正常识别传入和传出呼叫的活动,但我需要将其更改为服务,以便它可以运行到后台。我无法找到如何改变它。我的活动如下:
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;
}
}
}
}
我的第二个问题我可以将没有活动的服务安装到手机中。
答案 0 :(得分:3)
只需extends
Service
而不是Activity
。您确实需要一项活动来启动服务。您可以通过注册ACTION_BOOT_COMPLETED
并启动broadcast receiver
服务来启动服务。但是,从ICS
向上,您需要一项活动至少启动一次服务。之后,将永远不再需要这项活动。
答案 1 :(得分:2)
您需要传递意图才能启动服务。您可以创建仅启动服务的活动,并且此活动没有视图。
让您的类扩展Service
而不是Activity
,并创建另一个实例化您的服务并执行startService(yourserviceInstance);