0

着信通話と発信通話を聞きたいのですが、このプロセスはサービスとして実行する必要があります。着信通話と発信通話を認識するために正常に動作するアクティビティを作成しましたが、バックグラウンドで実行できるようにサービスに変更する必要があります。変更方法がわかりません。私のアクティビティは次のとおりです。

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 番目の質問は、アクティビティなしで電話にサービスをインストールできますか。

4

2 に答える 2

3

の代わりextends ServiceActivity。サービスを開始するにはアクティビティが必要です。ACTION_BOOT_COMPLETEDaを登録してサービスを開始することで、起動時にサービスを開始できbroadcast receiverます。ただし、ICS上からは、サービスを少なくとも 1 回起動するためのアクティビティが必要です。その後、アクティビティが再び必要になることはありません。

于 2013-04-24T01:56:17.170 に答える
2

サービスを開始するには、インテントを渡す必要があります。サービスを開始するだけのアクティビティを作成できますが、このアクティビティにはビューがありません。Serviceではなくクラスを拡張Activityし、サービスをインスタンス化して実行する別のアクティビティを作成しますstartService(yourserviceInstance);

于 2013-04-24T01:57:47.373 に答える