2013-04-24 79 views
0

我要聽來電和撥出的電話,這個過程應該運行作爲service.I製成,其做工精細識別呼入和呼出一個活動,但我需要將其更改爲服務,以便它可以運行到background.I不能找出如何改變it.My活動如下:想聽聽來電和撥出呼叫

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; 
     } 
    } 

    } 
} 

我的第二個問題可我沒有一個活動安裝服務爲我的電話。

回答

3

只是extendsService而不是Activity。您確實需要開展一項服務的活動。你可以在啓動時開始爲您服務通過註冊一個ACTION_BOOT_COMPLETED,有你的broadcast receiver開始爲您服務。但是,從ICS向上,您需要進行至少一次啓動您的服務的活動。之後,活動將不再需要。

+0

另一個活動**從ICS向上,你需要一個活動啓動您的服務** 如果我要使用啓動此服務ACTION_BOOT_COMPLETED呢?我不想使用任何活動。 – Anirban 2013-04-24 02:03:38

+0

對於ICS和高達你需要從活動啓動完成後調用你的接收器啓動服務一次。我想這是出於安全原因。 – 2013-04-24 02:09:02

+0

如果我打算讓這個活動來服務我應該在哪裏把這個 'TelephonyManager mTelephonyMgr =(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)另一件事; mTelephonyMgr.listen(新的TeleListener(),PhoneStateListener.LISTEN_CALL_STATE);' – Anirban 2013-04-24 02:11:09

2

您需要傳遞啓動服務的意圖。您可以創建只啓動您的服務的活動,並且此活動沒有視圖。 讓你的類擴展Service而不是Activity,並創建一個實例化服務,並執行startService(yourserviceInstance);

相關問題